当我查看加载/存储架构时,寄存器中的变量存储在某个地址下的内存中。编译器如何知道变量存储在内存中的哪个地址加载它?他必须在某个地方有一张桌子。如果是这样,表存储在哪里?
答案 0 :(得分:1)
编译器生成symbol table,其中保存程序的变量。该表的基本索引为零,地址相对于此基数。 (此表是exe
文件的一部分)。
当操作系统执行exe文件时,它会将符号表加载到内存中,然后为其分配新的基址。 (取决于它可以找到加载文件的空位)。然后,相对于该新基址计算所有地址。实际上,基址被添加到符号表中的地址中(通常数据段寄存器保留该基址)