C ++类字段相对于内存对齐的首选顺序

时间:2019-05-21 15:57:18

标签: c++ c++11 memory

说我有一个简单的C ++类,其中包含各种具有不同大小的类型。 据我了解,大小相同的类型应组合在一起以最大程度地实现内存对齐。假设我的目标是最大化内存效率

订购不同尺寸的类型的最佳方法是什么?在下面的示例中,假设HeavyClass是一个大对象。在末端放置大物件是否正确?

class MyClass {
  int d_someInt;
  int d_anotherInt;
  long d_someLong;
  HeavyClass d_heavyClass;
};

像缓存局部性,可读性之类的通常情况适用,但所有其他条件都相同,我想最大化对齐方式。

2 个答案:

答案 0 :(得分:2)

  

说我有一个简单的C ++类

然后保持这种状态,以一种使您的类易于阅读且易于推理的方式对成员进行排序。

答案 1 :(得分:1)

最大化对齐方式只是一个潜在的目标,您可能还希望根据使用情况进行分组(将一起使用的成员在类定义中彼此靠近)。由于缓存命中(使CPU不必经常从主内存中获取数据),使成员彼此靠近使用会提高性能。当您拥有类型的数组时,最大化对齐方式最有可能是一种理想的策略,这样就不会有太多的未使用填充。