理解内存(3)

MemoryMap

一旦ELF文件执行,那么一个text区和两个data段将被加载到不同的虚拟内存区域。按照惯例,text区占用了低的内存地址,而data区占用了高的内存地址。并且适当的权限分配给每个区域。通常情况下,text段是“可读-可执行”而data段是“读写”权限。A typical process memorymap is illustrated in Figure 3.

Fig. 3 Process memory map showing text, data, and bss segments.

虚拟内存地址从上图中的底部0地址开始一直增长到512GB向上。大于512GB的地址被Linux 内核使用。但是这只是针对于AMD64硬件结构。其他的架构或许不同。尽管一个进程的大小(text+data+bss)在编译的时候被建立,并且在运行期保留了一些常量。但是进程仍然可以在运行期通过malloc()in c或者是ALLOCATABLE arrays in Fortran 90/95。通过动态分配的数据被放在内存中的堆中。如图4


Fig. 4 Memory map with heap segment included.
Data and bss segments are shown as one.

所有的三个segments,text,data(data+bss)和heap都是通过page table被映射到虚拟内存中。

All three segments, text,data (data+bss), and heap, are mapped to real memory through the page table.The figure shows that the heap segment expands and contracts as memory isallocated and deallocated. Consequently, page table entries are added ordeleted as necessary. 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值