结构体内数据元素对齐

来源:互联网 发布:淘宝色情服务暗语 编辑:程序博客网 时间:2024/05/16 17:39

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

如:

#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编译器要“聪明”一些。
原创粉丝点击