【发布时间】:2019-12-06 06:13:42
【问题描述】:
考虑使用具有以下类型对齐的 x64 位 Windows 操作系统:
据我所知,这样做是非常糟糕的:
struct X_chaotic
{
bool flag1;
double d1;
bool flag2;
double d2;
bool flag3;
double d3;
//... and so on ...
};
根据C++ Alignment, Cache Line and Best Practice 和Data structure alignment, 写这个应该更好/更快,更紧凑:
struct X_alignOrder
{
double d1;
double d2;
double d3;
//... all other doubles ...
bool flag1;
bool flag2;
bool flag3;
//... all other bools ...
};
成员按照对齐大小的顺序声明,从最高对齐开始。
可以肯定地说按对齐大小对数据成员的声明进行排序是个好主意吗?你会说这是最佳实践吗?还是没有区别?
(我听说编译器不能重新排列定义的顺序,由于 C++ 标准,这甚至适用于类的访问说明符块中声明的所有数据成员)
因为我从未在 Scott Meyers 的书中或 Bjarne Stroustrup 的书中读到过这方面的内容,所以我想知道是否应该开始为我的日常工作通过对齐来重新排序数据声明。
【问题讨论】:
-
如果您进行过搜索,您可以在这里阅读到它。
标签: c++ memory-alignment