程序内存分配,堆栈的基础了解
2012-07-27 17:17
288 查看
一个由C/C++编译的程序占用的内存分为以下几个部分 :
栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量、未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
文字常量区 —常量字符串就是放在这里的。程序结束后由系统释放
程序代码区—存放函数体的二进制代码。
栈【stack】:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。
堆【heap】:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量、未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
文字常量区 —常量字符串就是放在这里的。程序结束后由系统释放
程序代码区—存放函数体的二进制代码。
栈【stack】:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。
堆【heap】:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
相关文章推荐
- J2SE基础篇——数据类型、运算符、语句、程序执行时内存分配、进制、编码
- C/C++程序中内存的分配和堆栈的区别总结
- 程序运行时,对象是怎么进行放置的呢?特别是内存是怎么分配的呢?对这些方面的了解会对你有很大的帮...
- 转载:程序内存分配 堆栈
- 程序员求职之道(《程序员面试笔试宝典》)之程序设计基础(内存分配形式)?
- 堆栈程序内存分配详解
- 程序的内存分配问题(堆栈分配)
- C/C++程序 内存分配规则(堆栈的系统分配规则)
- JAVA基础积累(程序运行时对象是怎么放置安排,内存是如何分配?)
- 程序员求职之道(《程序员面试笔试宝典》)之程序设计基础(内存分配形式)?
- 堆 栈 程序 内存分配 详解
- 探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别(二)
- 探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别2
- 一些存储概念自己有用需要封装内存分配函数是了解
- C程序-内存区域分配
- 程序内存分配
- 程序的内存分配
- 一个c/c++程序中的内存分配
- 程序在的内存中的分配(常量,局部变量,全局变量,程序代码)
- jvm中堆栈以及内存区域分配