您的位置:首页 > 其它

结构体内数据元素对齐

2013-02-27 20:13 302 查看
默认情况下,为方便结构体内元素的访问于管理,当结构体内的数据元素的长度小于处理器的位数的时候,便以结构体内的最长数据元素为对齐单位,即结构体的长度一定为最长数据元素的长度的整数倍。如果结构体内存在长度大于处理器位数的数据元素,则处理器的位数为对齐单位。

如:

#include <stdio.h>

struct

{

float a;

int b;

char c;

}node;

int main()

{

int p=sizeof(node);

printf("%d \n",p);

return 0;

}



#include <stdio.h>

struct

{

char b

char c;

}node;

int main()

{

int p=sizeof(node);

printf("%d \n",p);

return 0;

}


但是同样是对齐,不同的编译器的对齐还是有所差距,对于如下代码:

int mian()

{

int a;

char b;

int c;

printf("0x%08x ",&a);

printf("0x%08x ",&b);

printf("0x%08x ",&c);

return 0;

}

利用vc编译后结果:

0x0012ff7c

0x0012ff7b

0x0012ff80

即 b(1字节) a(4字节) c(4字节)共9字节

而Dev C++和LCC编译后的结果均为:

c(4字节)中间相隔3字节 b(1字节)a(4字节)共12字节

由此可知vc编译器要“聪明”一些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: