#include <stdio.h>
//用来指定结构体(联合)中对齐的字节数,即按多少字节对齐,如果不指定,则结构体按照最大的数据成员的长度进行对齐,
//如果指定了,为n,若n大于等于结构体中最大数据成员的长度,则n无效,按照最大数据长度对齐,若n小于最大数据成员长度
//则按照n个字节进行对齐,及数据成员长度大于等于n的成员,地址必须是n的整数倍,长度小于n的无限制
//注意,此预编译指令只对结构体(联合)数据成员有效,对外部的数据类型无效,详见36-39行
#pragma pack(2)
typedef struct test
{
char a;
int b;
short c;
}Test;
typedef struct test2
{
char a;
}Test2;
int main()
{
Test temp;
char * p = (char *)&temp.a;
printf("p = %p\n", p);
p = (char*)&temp.b;
printf("p = %p\n", p);
p = (char *)&temp.c;
printf("p = %p\n", p);
printf("struct size is %d\n", sizeof(Test));
printf("struct2 size is %d \n", sizeof(Test2));
char j, k;
double a = 12, b = 213.123, c = 2131.123;
int i;
printf(" p = %p\n", &j);
printf(" p = %p\n", &k);
printf(" p = %p\n", &a);
printf(" p = %p\n", &b);
printf(" p = %p\n", &c);
printf(" p = %p\n", &i);
}
编译器的对齐方式
最新推荐文章于 2025-03-04 22:41:46 发布