理解内存(3)

来源:互联网 发布:淘宝首页文案范文 编辑:程序博客网 时间:2024/06/05 05:15

MemoryMap

一旦ELF文件执行,那么一个text区和两个data段将被加载到不同的虚拟内存区域。按照惯例,text区占用了低的内存地址,而data区占用了高的内存地址。并且适当的权限分配给每个区域。通常情况下,text段是“可读-可执行”而data段是“读写”权限。A typical processmemorymap 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. 
原创粉丝点击