内存对齐(与结构体相关的引例)

mac2024-11-16  8

定义

在结构中,编译器为结构的每个成员按其自身的自然对界条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。 结构体成员存放的地址要能整除该成员本身的大小 2.前面所有成员的大小相加应该是当前成员大小的倍数 3.整个结构体的大小应该是该结构体中单个最大成员大小的倍数 struct A { char a;//1+3 int b;//4 }//8个字节 struct B { char a;//1+1 short b;//2 int c;//4 }//8个字节 struct c { int a;//4 char b;//1+1 short c;//2 }//8个字节 struct D { char a;//1+3 int b;//4 short c;//2+2 }//12个字节 满足条件3

特殊例子:

struct 1 { char a;//1 struct 2 { int b; long c; }; };//1个字节,因为该结构体没有定义变量 struct J { char a;//1+3 struct { int b; //4 long c;//4 }; };//12个字节 定义了一个没有名字的变量

易错题

struct k { char a;//1+3 short b[4];//2*4 int c;//4 };//16个字节
最新回复(0)