C+的优先顺序+;与内存对齐相关的类字段 我有一个简单的C++类,包含各种不同大小的类型。strong>据我所知,大小相同的类型应该分组在一起,以最大限度地实现内存对齐。假设我的目标是最大限度地提高内存效率

C+的优先顺序+;与内存对齐相关的类字段 我有一个简单的C++类,包含各种不同大小的类型。strong>据我所知,大小相同的类型应该分组在一起,以最大限度地实现内存对齐。假设我的目标是最大限度地提高内存效率,c++,c++11,memory,C++,C++11,Memory,订购不同尺寸的型号的最佳方式是什么?在下面的示例中,假设HeavyClass是一个大对象。我在末端放置大型对象是否正确 class MyClass { int d_someInt; int d_anotherInt; long d_someLong; HeavyClass d_heavyClass; }; 通常,缓存位置、可读性等都适用,但在其他条件相同的情况下,我希望最大化对齐。最大化对齐只是一个潜在目标,您可能还希望根据使用情况进行分组(将一起使用的成员在类定义中非常接近)

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

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

通常,缓存位置、可读性等都适用,但在其他条件相同的情况下,我希望最大化对齐。

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

除非您处理超低延迟,否则更喜欢人类可读性而不是打包效率,即将相互关联的字段放在彼此靠近的位置。这一切都取决于您。通常先放置较大的对象,因为它们具有最严格的对齐要求。但是,在某些情况下,将频繁访问的成员放在第一位是有意义的(以便在访问它们时允许较小的常量偏移),从而减少代码大小。当对齐不是问题时,我喜欢按成员名称对数据成员进行排序。这有助于查找数据成员。通过将最大的对象放在第一位,将最小的对象放在最后,可以实现最佳排序。但这是一个超级微观优化,你不应该担心(有明确定义的例外)。如果你在问这个问题,你可能不知道该怎么做,所以不要问不要担心它,让编译器担心微优化(它通常比普通人好)。@MartinYork这在实践中可能是正确的答案