c – 班级成员的最优顺序是什么?

如果我有以下类:
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;
};

会员的最优顺序是什么?据我所知,在创建该类的实例时,成员的声明顺序等于内存中成员的顺序.

>我应该对成员进行排序,以使相等的类型在一起吗?
>所有指针是否相同?
>重排对对象的大小有影响吗? 4或8字节对齐是否适用?
>我如何看到上述的效果? sizeof是否显示对象使用的内存,包括空白对齐?
>在一天结束时更好的排序会员,使他们的意义和背景更容易理解?

解决方法

根据经验,你应该按尺寸排序,从更小到更小.这将创建结构的最小填充,从而最小化结构尺寸.如果结构的对象在连续分配的存储器中使用,则这是最重要的.向量和帮助很多缓存(更多的对象适合在同一个高速缓存行).

安德烈·亚历山大·库雷斯(Andrei Alexandrescu)所表现的另一个令人惊讶的优化(我认为在CppCon之一)是他最先获得的成员.这是更快的,因为偏移量为零.当然,他正在谈论微型优化,在将应用程序定位到基准之后,并关心每一个小小的性能.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录<future>future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...