您的位置:首页 > 其它

__attribute__对齐属性的理解

2013-11-28 14:55 134 查看
下面的例子中使用__attribute__属性定义了一些结构体及其变量,并给出了输出结果和对结果的分析。

程序代码为:
struct  p
{
       int a;
       char b;
       char c;
}__attribute__( ( aligned(4) ) ) pp;
struct  q
{
       int a;
       char b;
       struct n qn;
       char c;
}__attribute__( ( aligned(8) ) ) qq;
int  main()
{
       printf("sizeof(int)=%d,sizeof(short)=%d,sizeof(char)=%d/n",sizeof(int),sizeof(short),sizeof(char));
       printf("pp=%d,qq=%d /n", sizeof(pp),sizeof(qq));
       return 0;
}
输出结果:
sizeof(int)=4,sizeof(short)=2,sizeof(char)=1
pp=8,qq=24
分析:
sizeof(pp):
sizeof(a)+ sizeof(b)+ sizeof(c)=4+1+1=6<2^3=8= sizeof(pp)
sizeof(qq):
sizeof(a)+ sizeof(b)=4+1=5
sizeof(qn)=8;
即qn是采用8字节对齐的,所以要在a,b后面添3个空余字节,然后才能存储qn,
4+1+(3)+8+1=17
因为qq采用的对齐是8字节对齐,所以qq的大小必定是8的整数倍,即qq的大小是一个比17大又是8的倍数的一个最小值,由此得到
17<2^4+8=24= sizeof(qq)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储 attribute aligned