Compiler construction 什么是绝对代码?为什么在编译时知道它?

Compiler construction 什么是绝对代码?为什么在编译时知道它?,compiler-construction,operating-system,compile-time,Compiler Construction,Operating System,Compile Time,在学习操作系统概念期末考试时,我偶然发现 Compile time: If memory location knows, **absolute code** can be generated; must recompile code if starting location changes 绝对代码的例子是中断向量表。我想知道这句话到底是什么意思,为什么中断向量表在编译时是已知的?它指的是在已知的固定内存地址加载的代码。由于该地址是固定的,因此可以编译跳转以直接指向其目标内存地址,而无需使用相

在学习操作系统概念期末考试时,我偶然发现

Compile time: If memory location knows, **absolute code** can be generated;
must recompile code if starting location changes

绝对代码的例子是中断向量表。我想知道这句话到底是什么意思,为什么中断向量表在编译时是已知的?

它指的是在已知的固定内存地址加载的代码。由于该地址是固定的,因此可以编译跳转以直接指向其目标内存地址,而无需使用相关跳转指令或在加载时修复任何内容。

给出的答案是正确的,但还有另一种情况。在嵌入式系统中,当编译ROM时,通常代码的最终地址是相对较早做出的决定。对于小型芯片,设计者决定代码的许多部分将被放置在芯片的内存空间中的什么位置,并且通常也有内存映射的I/O位置。对于ROM,ROM的目标地址是已知的

在这种情况下,仍然有两种可能性。一个是编译器可以生成直接处理这些位置的代码(以及在C++帮助中新增的新特性)。另一个是编译器生成绝对寻址和可重定位代码的混合。在每种情况下,具有“定位器”功能的特殊链接器都会输出带有绝对寻址的最终代码。在每种情况下,最终地址都是绝对的,不需要运行时修复