C++ 标准中哪里记录了对象的内存布局?

Where in the C++ Standard is the memory layout of objects documented?

这是个大问题,所以我要的是参考资料,而不是小册子大小的答案。我正在浏览 Stroustrup 的 C++ 之旅,看起来对象的布局方式是内存是许多 C++ 功能设计的基础,例如PODs vs 聚合 vs 类 虚拟成员。

不幸的是,Tour 本身并没有详细介绍这个主题,浏览一些标准参考资料(例如 C++ Primer 5ed 和 TCPPPL 4ed)的 ToC 也没有显示它们是否涵盖或在何处涵盖。

[class.mem]/18:

Non-static data members of a (non-union) class with the same access control are allocated so that later members have higher addresses within a class object. The order of allocation of non-static data members with different access control is unspecified. Implementation alignment requirements might cause two adjacent members not to be allocated immediately after each other; so might requirements for space for managing virtual functions and virtual base classes.

[class.mem]/25:

If a standard-layout class object has any non-static data members, its address is the same as the address of its first non-static data member. Otherwise, its address is the same as the address of its first base class subobject (if any). [ Note: There might therefore be unnamed padding within a standard-layout struct object, but not at its beginning, as necessary to achieve appropriate alignment. — end note ] [ Note: The object and its first subobject are pointer-interconvertible ([basic.compound], [expr.static.cast]). — end note ]

还有[dcl.array] which indicates that arrays are contiguous in memory, [class.bit] which talks about bit-fields, and [intro.object]讲的对象大小和重叠子对象的概念。

可能还有其他地方。没有一处。