• C++对象内存布局
• 按照实例数据成员声明顺序从上到下排列(与C语言保持兼容)
• 虚函数指针占用一个指针size
• 静态数据成员不参与
• 内存对齐与填充——
• 对象内存对齐是为了优化CPU存储数据效率、避免数据截断
• 按对齐系数(4字节、8字节)整倍数
• 可使用#pragma pack(4)控制
• 简单优化:长字段放前,短字段置后(聚集)
• 对象有多大?sizeof
class C1
{
int i; //4 byte
char c1; //1 byte
char c2; //1 byte
}; // 8字节 内存
class C2
{
char c1; //4
int i; //4
char c2; //4
};//12 byte 内存填充 padding
class C3
{
int i1; //4
char c1; //4
int i2; //4
char c2; //4
int i3;//4
char c3;//4
int i4;//4
char c4; //4
};//32
class C4
{
int i1; //4byte
int i2;
int i3;
int i4;
char c1;
char c2;
char c3;
char c4;
};// 4* 4 + 4
int main()
{
cout<<sizeof(C1)<<endl;// 输出8
cout<<sizeof(C2)<<endl;// 输出12
cout<<sizeof(C3)<<endl;// 输出32
cout<<sizeof(C4)<<endl;// 输出20
}