C语言字节对齐

这篇文章讲的非常清晰:http://www.linuxsong.org/2010/09/c-byte-alignment

总结一下:

(1)每个结构体成员都有一个有效对齐值N,如果对结构体事先指定了有效对齐值,则N不得超过指定的值(如int自身有效对齐值是4,char是1,若在外部指定有效对齐值为2,则int有效对齐值变为2,char仍是1)。

(2)每个结构体成员的起始地址均为其有效对齐值N的整数倍,否则用空白填充且起始地址后移。

(3)整个结构体的有效对齐值是所有成员中有效对齐值的最大值,且整个结构体所占空间必须是结构体有效对齐值的整数倍。

(4)当结构体中的成员也为结构体时,将子结构体作为整体来看,其内存结构布局不变,如下例子:

struct A{                                                              
    char a;                                                            
    short b;                                                           
    int c;                                                             
};                                                                     
struct B{                                                              
    char a;                                                            
    struct A c;                                                        
};                                                                     
                                                                       
void main()                                                            
{                                                                      
    printf("%d\n", sizeof(struct A));                                  
    printf("%d\n", sizeof(struct B));                                  
                                                                       
    struct B f;                                                        
    printf("B:   %p\n", &f);                                           
    printf("B.a: %p\n", &f.a);                                         
    printf("B.c: %p\n", &f.c);                                         
    printf("A.a: %p\n", &f.c.a);                                       
    printf("A.b: %p\n", &f.c.b);                                       
    printf("A.c: %p\n", &f.c.c);                                       
}

输出结果:

8
12
B:   0xbeede6f4
B.a: 0xbeede6f4
B.c: 0xbeede6f8
A.a: 0xbeede6f8
A.b: 0xbeede6fa
A.c: 0xbeede6fc

 

 

posted on 2014-06-22 21:05  xfan_  阅读(129)  评论(0编辑  收藏  举报

导航