代码区
存放程序的代码,即 CPU 执行的机器指令,只读
常量区
存放常量,即程序运行期间不能被修改的量,例如数组的名字等
静态区、全局区、变量区
静态变量和全局变量的存储区域,一旦静态区内存被分配,直达程序全部结束才会被释放。
堆区
C 中使用 malloc() 函数主动申请,之后要用 free() 释放内存,不然容易造成内存泄露。不要重复释放,因为释放后的指针可能去做其他的事情。
栈区
存放函数内的局部变量,形参,函数返回值。系统自动管理栈内存(分配,回收)。栈可用于函数的嵌套调用,中断切换时保存和恢复现场数据,
变量在堆和栈的区别
申请方式:s 的空间有操作系统自动分配释放,h 需要手动分配释放
申请大小:s 空间有限,h 是很大的自由存储区域**
申请效率:s 申请效率高,h 效率低
程序中所用的数据分别存放在静态存储区和动态存储区中。静态存储区数据在程序的开始就分配好内存区,在整个程序执行过程中它们所占的存储单元是固定的,在程序结束时就释放,因此静态存储区数据一般为全局变量。动态存储区数据则是在程序执行过程中根据需要动态分配和动态释放的存储单元,动态存储区数据有三类函数形参变量、局部变量和函数调用时的现场保护与返回地址。由于动态存储变量可以根据函数调用的需要,动态地分配和释放存储空间,大大提高了内存的使用效率,使得动态存储变量在程序中被广泛使用。
栈中分配局部变量空间,堆区是向上增长的用于分配程序员申请的内存空间。另外还有静态区是分配静态变量,全局变量空间的;只读区是分配常量和程序代码空间的。