对象和结构成员访问和地址偏移量计算



我正在编写一个简单的VM,我对实现对象和结构成员访问有一个问题。

由于程序的起始地址在每次运行时都是任意的,因此它的每个对象的地址也是任意的。

因此,我能想到的访问对象或其成员对象的唯一方法是访问"基"指针的偏移量,这意味着访问程序结构中的任何内容都需要进行算术运算。

我的问题是,专业编译器是否就是这样做的,因为很明显,这种方法会给运行时增加一些开销,而我自己也想不出任何方法来从运行时卸载这个过程,因为缺乏对内存分配及其地址一致性的保证?

几十年来,大多数计算机都提供寻址模式,可以将地址指定为基数和偏移量的组合,并且实际计算是在硬件中进行的,CPU时钟周期无需额外成本。

最近(过去几十年)的计算机提供了用于虚拟化内存布局的硬件,这意味着即使每次运行时项目的物理地址不同,它在虚拟地址空间中的地址也保持不变。同样,使用基地址没有额外的成本,因为计算是对程序的执行二进制代码隐式和无形地执行的。

最新更新