struct thing1
{
char s;
double d;
int i;
};
struct thing2
{
int i;
double d;
char s;
};
cout << "alignof(char) " << alignof(char) << endl;
cout << "alignof(int) " << alignof(int) << endl;
cout << "alignof(double) " << alignof(double) << endl;
cout << "alignof(thing1) " << alignof(s1) << endl;
cout << "alignof(thing2) " << alignof(s2) << endl;
``
内存对齐:数据项只能存储在地址是数据项大小整数倍的内存位置上。
char 1
int 4
double 8
thing1 16
thing2 24
结构体thing1 占用16位
结构图体thing2 占用24位
内存地址 0x0008 0x0012 0x0016
1、4、8 1 4 8
内存地址 0x0008 0x0016 0x0024
4、8、1 4 8 1
成员排列顺序不同,导致thing2需要更多的内部填充,以便其边界处于正确的位置。
内存对齐之alignof
最新推荐文章于 2024-07-24 08:30:00 发布