程序的内存分配

来源:互联网 发布:Date java 编辑:程序博客网 时间:2024/06/05 22:42

程序的内存分配

一个由C/C++/OBJC编译的程序占用内存分布的结构分为以下几个部分:

程序内存分配图例

  1. 栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈。

  2. 堆区(heap):一般由程序员申请并指明大小,最终也由程序员释放。如果程序员不释放,程序结束时可能会由OS回收。对于堆区的管理是采用链表式管理的,操作系统有一个记录空闲内存地址的链表,当接收到程序分配内存的申请时,操作系统就会遍历该链表,遍历到一个记录的内存地址大于申请内存的链表节点,并将该节点从该链表中删除,然后将该节点记录的内存地址分配给程序。

  3. 全局区(静态区)(static):顾名思义,全局变量和静态变量存储在这个区域。只不过初始化的全局变量和静态变量存储在一块,未初始化的全局变量和静态变量存储在一块。程序结束后由系统释放。

  4. 文字常量区:这个区域主要存储字符串常量。程序结束后由系统释放。

  5. 程序代码区:这个区域主要存放函数体的二进制代码。

http://www.devtalking.com/articles/you-should-know-block/

0 0