C语言字节对齐问题

来源:互联网 发布:余文华 大数据 编辑:程序博客网 时间:2024/05/09 05:04

Ubuntu版本32位

linux@xubuntu:~$ uname -arLinux xubuntu 3.5.0-40-generic #62~precise1-Ubuntu SMP Fri Aug 23 17:59:10 UTC 2013 i686 i686 i386 GNU/Linux


C源代码

#include <stdio.h>int main(){    int a;    char b;    char c;    printf ("&a=%p\n",&a);    printf ("&b=%p\n",&b);    printf ("&c=%p\n",&c);    printf ("sizeof(a)=%d\n",sizeof(a));    struct node    {    int e;    char f;    char g;    };    struct node A;    printf ("&(A.e)=%p\n",&(A.e));    printf ("&(A.f)=%p\n",&(A.f));    printf ("&(A.g)=%p\n",&(A.g));    printf ("sizeof(A)=%d\n",sizeof(A));    return 0;}


输出结果

linux@xubuntu:~/test$ ./a.out &a=0xbf9a42e8&b=0xbf9a42ee&c=0xbf9a42efsizeof(a)=4&(A.e)=0xbf9a42e0&(A.f)=0xbf9a42e4&(A.g)=0xbf9a42e5sizeof(A)=8


问题

为什么定义的局部变量的int a与char b之间是间隔了6个字节。按字节对齐方式的话应该是结构体里的这种对齐方式,int e与char f间隔4字节,在char g后面填充2字节。