结构体内存对齐
程序员文章站
2022-07-12 16:49:59
...
关于结构体的内存对齐文体,主要遵循下面几个原则,记住就好。
1.结构体的第一个成员永远都放在结构体的0偏移处。
2.从第二个成员开始,都要对其到某个对齐数的整数倍处。
(对齐数:结构体成员自身大小和默认对齐数的较小值;
默认对齐数:VS编译器下:8,linux:4)
3.结构体的总大小必须是最大对齐数的整数倍。
注意:0偏移处大家可能有所疑问,其实就是系统默认从哪个位置开始分配内存的地方就是0偏移处,因为它并没有偏移嘛。
偏移:就是往后挪。
请大家看下面的详解:
struct student
{
char a;
int b;
double c;
char d;
};
验证结果:
下面再来看几个具体的实际例子:
下面是我自己总结的简单计算方法(a+b)b表示自身大小,a表示偏移几个位置,0的话表示紧接着就分配空间了
struct student
{
int a;//0+4
char b;//0+1
int c;//3+4
double d;//4+8
};
4+1+3+4+4+8=24(刚好为最大对齐数8的倍数所以不用再继续分分配空间)
结果:24(如果对结果有疑问自己上机验证)struct student
{
double a;//0+8
int b;//0+4
char c;//0+1
int d;//3+4
};
8+4+1+3+4=20
因为最大对齐数为8,而20不是8的倍数,所以自动分配空间到24,为8的倍数
结果:24(如果对结果有疑问自己上机验证)如果有什么问题或者疑问可以私信我,或者直接留言评论,谢谢大家的宝贵意见!