【发布时间】:2015-10-14 18:44:45
【问题描述】:
来自http://blog.jamesdbloom.com/JVMInternals.html 我发现了这个
C/C++ 代码通常编译为一个目标文件,然后将多个目标文件链接在一起以生成一个可用的工件,例如可执行文件或 dll。在链接阶段,每个目标文件中的符号引用被替换为相对于最终可执行文件的实际内存地址。
如何在链接期间确定相对内存地址,如果运行可执行文件的操作系统是负责在运行时分配内存的人,并且只要有可用内存空间就分配此内存(我对事情的理解工作)。
【问题讨论】:
-
链接器输出相对地址,操作系统在加载程序时将其转换为绝对地址。
-
那么程序内部使用和定义的所有变量和对象的地址与程序执行时的起始地址有固定的关系吗?暗示如果我加载程序的操作系统有足够的内存但不完全存在于程序将无法运行的相对地址?
-
“不完全存在于相对地址”没有意义。该程序不会在相对地址加载。操作系统在其地址空间中为程序找到空间,将其加载到那里,然后修复地址。请记住,现代操作系统使用虚拟化地址空间,因此每个进程或多或少都有要加载的所有内存。
-
内存中有连续的空间吗?所以整个程序要么适合一个连续的空间,要么根本没有空间?对不起我的无知,但我时不时地工作。