这是一个很大的问题,所以我要求参考而不是小册子大小的答案。我正在浏览 Stroustrup 的 Tour of C++,似乎对象的布局方式是内存是许多C++功能设计的基础,例如 POD 与聚合与具有虚拟成员的类。
不幸的是,巡回赛本身并没有详细涵盖这个主题,并且浏览一些标准参考文献(如C++ Primer 5ed和TCPPPL 4ed(的ToC并没有显示它们是否或在哪里涵盖了它。
[class.mem]/18:
分配具有相同访问控制的(非联合(类的非静态数据成员,以便以后的成员在类对象中具有更高的地址。未指定具有不同访问控制的非静态数据成员的分配顺序。实现对齐要求可能会导致两个相邻的成员不紧紧分配彼此;对管理虚拟功能和虚拟基类的空间的需求也是如此。
和 [class.mem]/25:
如果标准布局类对象具有任何非静态数据成员,则其地址与其第一个非静态数据成员的地址相同。否则,其地址与其第一个基类子对象(如果有(的地址相同。[ 注意:因此,标准布局结构对象中可能存在未命名的填充,但在其开头没有,这是实现适当对齐所必需的。— 尾注 ] [ 注意:对象及其第一个子对象是指针可相互转换的([basic.compound], [expr.static.cast](。— 尾注 ]
还有 [dcl.array] 表示数组在内存中是连续的,[class.bit] 谈论位字段,[intro.object] 谈论对象大小和重叠子对象的概念。
可能还有其他地方。没有一个地方。