默认情况下,为方便结构体内元素的访问于管理,当结构体内的数据元素的长度小于处理器的位数的时候,便以结构体内的最长数据元素为对齐单位,即结构体的长度一定为最长数据元素的长度的整数倍。如果结构体内存在长度大于处理器位数的数据元素,则处理器的位数为对齐单位。
如:
#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编译器要“聪明”一些。