【发布时间】:2016-11-10 11:47:17
【问题描述】:
我试图了解内存分配在程序编译和加载的不同阶段是如何工作的。
1) 编译器和汇编器生成从地址 0 开始的代码和数据段。
2) 链接器通过关联内存位置来重定位这些段 使用每个符号定义,然后修改所有引用 到那些符号,使它们指向这个内存位置。
3) 加载程序在进程上下文中将程序加载到主内存,并且
因此,正是在这一步完成了分页和所有与内存管理相关的操作。
我的问题是关于两件事:
1)链接器分配的地址与加载器分配的地址有何关系。我们可以将链接器地址称为虚拟地址吗?
2)是否所有程序都有相同的虚拟地址(最终映射到不同的物理地址?)
【问题讨论】:
标签: process linker loader virtual-memory