程序在内存中的分布

v 前些天学习到了程序在虚拟内存中分布的一些知识点,结合在网上查阅的一些资料,整理一下知识点。本博客参考博主 hackbuteer1的《程序在内存中的分布》这篇文章。

 

    

 

v 在现代的操作系统中,当我们说到内存,往往需要分两部分来讲:物理内存虚拟内存。从硬件上讲,虚拟空间是CPU内部的寻址空间,位于MMU之前,物理空间是总线上的寻址空间,是经过MMU转换之后的空间。

 

例如:对于一台内存为256M32bit x86主机来说,它的虚拟地址空间范围是0~0xFFFFFFFF4G),而物理地址空间范围是0x00000000~0x0FFFFFFF256M)。

 

v 一般我们所说的程序在内存中的分布指的就是程序在虚拟内存中的存储方式。

 

从低地址到高地址,可分为下面几段: 

Ø 预留内存地址(操作系统维护的内存地址,不可访问) 

 

Ø 程序代码区(只读,存代码和一些其他的东西); 

 

Ø data段(存初始化的全局变量和static变量,另外还有文字常量区,常量字符串就是放在这里,程序结束后有系统释放); 

 

Ø bss段(存未初始化的全局变量和static变量); 

 

Ø 堆(由低地址向高地址增长,一般(C++new和(Cmalloc分配,由程序员分配释放);

 

Ø 共享库文件(调用的库文件,位于堆和栈之间); 

 

Ø 栈(由高地址向低地址增长,和堆的增长方式相对,对不同的OS来说,栈的初始大小有规定,可以修改,目前默认一般为2M,由编译器自动分配释放); 






v 以上程序在虚拟内存空间中的分布,适用于一般的操作系统和内核。但不完全适用,例如:《unix系统编程》32位下,0-3G是用户区,3G-4G是内核区。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值