C程序内存空间
栈(stack) :栈又称堆栈, 主要用于存放程序的 非static局部变量 (static变量存储于数据段)。除此以外,在函数被调用时,栈用来传递参数和返回值。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。在栈中分配、释放内存由编译器自动控制,无需程序猿。
其主要作用:
1. 为函数内部的局部变量提供存储空间。
2. 进行函数调用时,存储“过程活动记录”。
3. 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。
堆(heap) :堆是用于存放进程运行中被动态分配的对象,它的大小并不固定,可动态扩张或缩减。当进程调用malloc/free等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张)/释放的内存从堆中被剔除(堆被缩减)。堆,又称自由空间,由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。而且,在堆中分配的内存是无名的,malloc/new等操作无法为其分配的对象命名,只能返回一个指向该对象的指针。
本文详细介绍了C程序的内存布局,包括栈、堆、BSS段、数据段和代码段的功能与用途。栈用于存储非static局部变量及函数调用信息;堆用于动态分配内存;BSS段存储未初始化的全局变量;数据段存储已初始化的全局变量;代码段则存放程序执行代码。
972

被折叠的 条评论
为什么被折叠?



