一、栈区(stack)
由编译器自动管理。存放函数的参数值,局部变量等。操作方式类似于数据结构中的栈。
栈是由高地址往低地址扩展的数据结构,是一块连续的内存区域。即:栈顶的地址和栈的最大容量是系统预先定好的,如果申请的空间超过栈的剩余空间时,将提示溢出溢出(overflow)。因此,能从栈获取的空间较小。
二、堆区(heap)
一般由开发者分配释放,如果不释放,程序结束时,可能由操作系统回收。其与数据结构中的堆是两回事。
堆是从低地址向高地址扩展的数据结构,是不连续的内存的区域。这是由于系统使用链表存储空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。因此,堆获得的空间比较灵活,也比较大。
三、全局区(静态区)
存放全局变量和静态变量。初始化的全局变量和静态变量放在一起,未初始化的放在一起。
四、 文字常量区
寸放字符串常量,程序结束后由系统释放。
五、程序代码区
存放函数体的二进制代码。