typedef struct test1 {
char a;//1
int b;//4字节
double c;//8
char d[11];//11
}Test1;//数据成员
int main(int argc, const char * argv[]) {
Test1 t1;
//xcode默认对齐系数8,即#pragma pack(8)
//char a, 1<8按1对齐,offset=0 [0]
//int b, 4<8按4对齐,char a占到[0],int b应该从地址1开始排, 地址1不是对齐数4的倍数,所以int b的首地址是从4的最小倍数开始,所以offset=4, [4...7];
//double c, 8=8按8对齐,int b已经占到[4...7],double c从地址8开始排,地址8是对齐数8的倍数,所以double c的首地址是从8的最小倍数开始,offse=8 [8...15]
//char d[11], 1<8按1对齐,double c已经占到[8...15], char d[11]从地址16开始,地址16是对齐数1的倍数,所以char d的,offset=16, 存储位置[16...26]
//最后为27位,又因为27不是内部最大成员中double 8位字节的倍数,所以补齐为32)
printf(" %lu\n %p\n %p\n %p\n %p\n", sizeof(t1), &t1.a, &t1.b, &t1.c, &t1.d);
return 0;
}
内存对齐规则
最新推荐文章于 2025-08-05 10:34:49 发布
3565

被折叠的 条评论
为什么被折叠?



