美文网首页
堆,栈深入理解

堆,栈深入理解

作者: 乐十七 | 来源:发表于2017-03-25 16:54 被阅读0次
r_虚拟内存.jpg

上图是进程的虚拟地址空间示意图。

堆栈段:

  • 1 为函数内部的局部变量提供存储空间。
  • 2 进行函数调用时,存储“过程活动记录”。
  • 3 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。

数据段(静态存储区):

包括BSS段的数据段,BSS段存储未初始化的全局变量、静态变量。数据段存储经过初始化的全局和静态变量。

代码段:

又称为文本段。存储可执行文件的指令。

堆:

就像堆栈段能够根据需要自动增长一样,数据段也有一个对象,用于完成这项工作,这就是堆(heap)。堆区域用来动态分配的存储,也就是用 malloc 函数活的的内存。calloc和realloc和malloc类似。前者返回指针的之前把分配好的内存内容都清空为零。后者改变一个指针所指向的内存块的大小,可以扩大和缩小,他经常把内存拷贝到别的地方然后将新地址返回。

1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap):由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放。
4、文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放。
5、程序代码区:存放函数体的二进制代码。

内存分为四部分:栈区,堆区,代码区,全局变量区

相关文章

  • 堆,栈深入理解

    上图是进程的虚拟地址空间示意图。 堆栈段: 1 为函数内部的局部变量提供存储空间。 2 进行函数调用时,存储“过...

  • JVM的内存模型

    Java内存区域——堆,栈,方法区等 深入理解java虚拟机(一)虚拟机内存划分 深入理解java虚拟机(十) J...

  • 深入理解Java知识中的堆和栈

    在Java语言的学习过程中最重要的就是理解好堆和栈,因为java的面向对象特性跟堆和栈的分离密切相关,所以细致深入...

  • 深入理解java虚拟机之jvm内存模型

    深入理解JVM—JVM内存模型 java的内存模型包括:本地方法区,java堆,Java虚拟机栈,本地方法栈,程序...

  • 【Jvm】运行时数据区域

    内容来自《深入理解Java虚拟机》和网络。 本篇结构: 程序计数器 Java 虚拟机栈 本地方法栈 Java 堆(...

  • js/jquery 学习笔记

    理解JavaScript中的堆和栈 这里先说两个概念:1、堆(heap)2、栈(stack)堆是堆内存的简称。栈是...

  • 缓冲区溢出提纲

    缓冲区溢出简单的来讲分为两种 栈溢出 堆溢出 那么什么是栈什么是堆呢 在这里简单谈一下对于堆和栈的理解 : 栈: ...

  • 堆和栈的理解

    一、预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编...

  • 堆、栈、队列简单理解

    堆 堆通常是一个可以被看作一棵树的数组对象,堆总是满足以下两个性质:1、堆中某个节点的值总是不大于或不小于其父节点...

  • 《关于栈和堆理解》

    本文仅供自我学习,禁止转载。 Objective-C的对象在内存中是以堆的方式分配内存的,并且堆内存是由你释放的。...

网友评论

      本文标题:堆,栈深入理解

      本文链接:https://www.haomeiwen.com/subject/pgycottx.html