我正在编写一个简单的虚拟机,我有一个关于实现对象和结构成员访问的问题。
由于程序的起始地址在每次运行时都是任意的,因此它的每个对象的地址也是任意的。
因此,我能想到的访问对象或其成员对象的唯一方法是访问“基”指针的偏移量,这意味着访问程序结构中的任何内容都需要进行算术运算。
我的问题是这是否是专业编译器中完成的方式,因为显然这种方法给运行时增加了一些开销,而且我自己也想不出任何方法来从运行时卸载这个过程,因为缺乏内存分配及其地址的一致性的保证?
最佳答案
几十年来,大多数计算机都提供寻址模式,让您将地址指定为基址和偏移量的组合,并且实际计算在硬件中执行,无需额外占用 CPU 时钟周期成本。
最近(过去几十年)的计算机提供了用于虚拟化内存布局的硬件,这意味着即使项目的物理地址在每次运行时都不同,其在虚拟地址空间中的地址仍然是相同的。同样,使用基地址没有额外的成本,因为计算是隐式执行的,对于程序的执行二进制代码来说是不可见的。关于对象和结构成员访问和地址偏移计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11490085/