如果我有以下课程:
class Example
{
bool m_b1;
SomeClass m_sc;
bool m_b2;
char * m_name;
bool m_b3;
int m_i1;
SomeClass * m_sc;
int m_i2;
};
Run Code Online (Sandbox Code Playgroud)
会员的最佳顺序是什么?据我所知,在创建此类的实例时,成员声明的顺序等于内存中成员的顺序.
小智 8
当使用初始化列表时成员变量依赖于另一个成员变量时,顺序很重要:
想象一个带有两个变量的类,其中第二个变量(varC)的构造函数需要第一个变量(varB)
class A
{
B varB;
C varC;
A()
: varC(varB)
{
}
};
Run Code Online (Sandbox Code Playgroud)
顺序决定构造函数执行的步骤,因此更改varB和varC的顺序会将varB的未初始化对象传递给varC.
当然,风格和可读性也很重要.
根据经验,您应该按尺寸排序,从大到小.这将创建结构的最小填充,从而最小化结构尺寸.如果结构的对象在连续分配的内存中使用,例如向量,并且对缓存有很多帮助(更多对象适合同一缓存行),这就最为重要.
Andrei Alexandrescu(我认为是在CppCon中的一个)证明了另一个惊人的优化是他带来了访问量最大的成员.这更快,因为偏移为零.当然,在对应用程序进行基准测试并关注每一小段性能之后,他正在谈论微优化.
| 归档时间: |
|
| 查看次数: |
810 次 |
| 最近记录: |