在C++中优化类实例的内存布局

dbb*_*bbd 6 c++ memory memory-alignment

将应用程序从32位升级到64位会增加指针大小和对象的内存占用量.

我正在寻找尽可能减少对象内存占用的方法.对于POD结构,我转储结构的内存布局,以找出如何打包成员并减少编译器填充.

有没有办法找出非POD对象的内存布局,如类实例?我怎么能实现类包装类对象的东西?

谢谢,丹

jus*_*tin 6

您可以使用 GCC-Wpadded来通知您添加填充的位置,然后根据该信息重新排序,在某些情况下减小尺寸。

对于内存中的表示,强制打包数据不是一个好主意。


Luc*_*ini 1

我不知道特定的非 POD 对象数据(即 vtable),尽管我认为这是由指针大小决定的。无论如何,您可以使用GCCVisual Studio#pragma pack都支持的编译器指令来控制成员的对齐方式。

您还可以阅读精彩的Agner Fog C++ 优化指南第 7.18 段:

类或结构的数据成员在创建类或结构的实例时按照声明的顺序连续存储。将数据组织成类或结构不会造成性能损失。访问类或结构对象的数据成员并不比访问简单变量花费更多的时间。大多数编译器会将数据成员与舍入地址对齐以优化访问