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

标签 object struct offset member memory-access

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

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

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

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

最佳答案

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

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

关于对象和结构成员访问和地址偏移计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11490085/

相关文章:

javascript - 将属性附加到函数对象是否安全/可接受?

php - PHP 中的可变变量类扩展——可能吗?

iPhone实例变量问题

c - 如何用确定的值初始化数组?

jquery - 通过 jquery 应用旋转变换后查找 CSS 元素位置(顶部和左侧)

c++ - 非字节偏移使用 off_t 合适吗?

excel - 使用(偏移和调整大小)而不是(相交),引发运行时错误 '1004' :Application-defined or object-defined error

c# - 如何从客户项目创建类的对象

C++,从 'int' 到位域的隐式截断

c - 如何从文件 C 初始化结构体?