对象/结构等的C++内存布局是什么?



C++我认为C++标准与数据成员在类中的排列方式无关,就内存布局而言?我认为这是有问题的编译器是正确的吗?

我对学习如何在物理内存中表示对象和其他C++实体(结构等)非常感兴趣(我知道列表是节点到节点,数组是连续内存 - 但语言的所有其他方面)。

编辑:学习x86汇编程序会有助于解决这个问题并更好地理解C++吗?

C++标准确实指定了一些东西,但远非一切。

主要规则如下:

  • 数组中的对象是连续布局的,它们之间没有填充。
  • 由访问说明符 (public:/private:/protected: ) 分隔的类成员对象按声明顺序在内存中布局,但成员对象之间可能存在未指定的填充量。
  • 对于某些类型(标准术语中的标准布局结构),第一个基类(如果不存在,则第一个成员)的布局与类本身位于同一地址。

标准还指定了一些零碎的东西,但总的来说,剩下的细节实际上取决于编译器。

是的,标准没有说明如何在内存中表示对象。要了解如何表示 normall C++ 对象,请阅读本书:对象模型内部C++。

最新更新