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

use*_*112 3 c++ compiler-construction

在C++中,我认为C++标准与数据成员在内存布局方面的排列方式无关?我是否正确地认为这取决于有问题的编译器?

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

编辑:学习x86汇编程序有助于此更好地理解C++吗?

jal*_*alf 6

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

主要规则如下:

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

标准指定了更多的部分,但总的来说,剩下的细节实际上归结为编译器.