进程地址空间的布局(整理)

 虚拟地址空间中包含了若干区域。其分布方式是特定于体系结构的,但所有方法都有下列共同成分。
 1)当前运行的二进制代码。该代码通常称之为text,所处的虚拟内存区域称之为text段。
 2)程序使用的动态库的代码
 3)用于保存全局变量和动态产生的数据的堆(应该还包括静态变量)
 4)用于保存局部变量和实现函数/过程调用的栈。
 5)环境变量和命令行参数的段
 6)将文件内容映射到虚拟地址空间中的内存映射。

  下图说明了大多数体系结构的虚拟地址地址空间中的布局情况。


text段如何映射到虚拟地址空间中由ELF标准确定。每个体系结构都指定了一个特定的起始地址:IA-32系统起始于0x08048000,在text段的起始地址与最低的可用地址之间有大约128M的间距,用于捕获NULL指针。其他体系结构也有类似的缺口:UltraSparc计算机使用0x100000000作为text段的起始点,而AMD64使用0x0000000000400000。堆紧接着text段开始,向上增长。
  栈起始于STACK_TOP,如果设置了PF_RANDOMIZE,则起始点会减少一个小的随机值。每个体系结构都必须定义STACK_TOP,大多数都设置为TASK_SIZE,即用户地址空间中最高的可用地址。进程的参数列表和环境变量都是栈的初始数据。
  用于内存映射的区域起始于mm_struct->mmap_base,通常设置为TASK_UNMAPPED_BASE,每个体系结构都需要定义。几乎所有的情况下,其值都是TASK_SIZE/3。要注意,

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值