2

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

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

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

我的问题是这是否是它在专业编译器中完成的方式,因为显然这种方法会给运行时增加一些开销,而且我自己想不出任何方法来从运行时卸载这个过程,因为缺乏对内存分配及其地址的一致性?

4

1 回答 1

2

几十年来,大多数计算机都提供寻址模式,允许您将地址指定为基数和偏移量的组合,并且实际计算是在硬件中执行的,不会增加 CPU 时钟周期的成本。

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

于 2012-07-15T07:04:52.450 回答