程序在内存中的分布
2013-04-06 13:27
141 查看
转自:点击打开链接
在现代的操作系统中,当我们说到内存,往往需要分两部分来讲:物理内存和虚拟内存。从硬件上讲,虚拟空间是CPU内部的寻址空间,位于MMU之前,物理空间是总线上的寻址空间,是经过MMU转换之后的空间。
一般我们所说的程序在内存中的分布指的就是程序在虚拟内存中的存储方式。
从低地址到高地址,可分为下面几段:
预留内存地址(操作系统维护的内存地址,不可访问)
程序代码区(只读,存代码和一些其他的东西);
data段(存初始化的全局变量和static变量,另外还有文字常量区,常量字符串就是放在这里,程序结束后有系统释放);
bss段(存未初始化的全局变量和static变量);
堆(由低地址向高地址增长,一般new和malloc分配,由程序员分配释放);
共享库文件(调用的库文件,位于堆和栈之间);
栈(由高地址向低地址增长,和堆的增长方式相对,对不同的OS来说,栈的初始大小有规定,可以修改,目前默认一般为2M,由编译器自动分配释放);
再上面存的都是操作系统和内核调用的一些内存地址。
如图所示:
在现代的操作系统中,当我们说到内存,往往需要分两部分来讲:物理内存和虚拟内存。从硬件上讲,虚拟空间是CPU内部的寻址空间,位于MMU之前,物理空间是总线上的寻址空间,是经过MMU转换之后的空间。
一般我们所说的程序在内存中的分布指的就是程序在虚拟内存中的存储方式。
从低地址到高地址,可分为下面几段:
预留内存地址(操作系统维护的内存地址,不可访问)
程序代码区(只读,存代码和一些其他的东西);
data段(存初始化的全局变量和static变量,另外还有文字常量区,常量字符串就是放在这里,程序结束后有系统释放);
bss段(存未初始化的全局变量和static变量);
堆(由低地址向高地址增长,一般new和malloc分配,由程序员分配释放);
共享库文件(调用的库文件,位于堆和栈之间);
栈(由高地址向低地址增长,和堆的增长方式相对,对不同的OS来说,栈的初始大小有规定,可以修改,目前默认一般为2M,由编译器自动分配释放);
再上面存的都是操作系统和内核调用的一些内存地址。
如图所示:
相关文章推荐
- 程序中的变量是如何在内存中分布
- linux c程序内存分布
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- 以C程序为例的内存分布详解
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- 程序(进程)内存空间分布深入理解
- ios 优化 cpu缓存与程序内存分布
- linux c程序内存分布
- C程序为例内存分布详解
- 基本语言细节-----程序在内存中的分布
- Vc 6.0 调试技巧,可以查看程序在内存的分布情况
- C程序的内存分布 &程序运行时,在内存中的分布
- 程序在内存中的分布
- 以C程序为例内存分布详解
- 程序在内存中的分布
- 程序在内存中的分布(转转)
- C语言 程序在内存中的分布
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- 内存管理之程序内存分布
- 程序在内存中的分布