试验取消以及自定义结构体中的内存对齐

2/10/2017来源:ASP.NET技巧人气:410

/* .c文件声明:该文件用于试验取消以及自定义结构体中的内存对齐 gcc支持但不推荐的对齐指令:#PRagma pack()   #pragma pack(n) (n=1/2/4/8) gcc推荐的对齐指令__attribute__((packed))  __attribute__((aligned(n))) __attribute__指令注意事项: 当结构体内的元素类型所占字节大于n时,n的大小变为该元素所占字节的大小。 使用方法如下: */ #include<stdio.h> #pragma pack(2) struct aaa { char a; int b; short d; }; #pragma pack() struct bbb { char a; short d; int b; }; __attribute__((packed)) struct ccc { char a; long b; //在gcc中,long为四个字节。 int d; }; __attribute__((aligned(2))) int main(void) { struct aaa a_1; struct bbb b_1; struct ccc c_1; printf("sizeof(a_1) = %d\n",sizeof(a_1)); //8,正确。 printf("sizeof(b_1) = %d\n",sizeof(b_1)); //8,正确。 printf("sizeof(c_1) = %d\n",sizeof(c_1)); //12,正确 return 0; }