C语言结构体对齐

对齐原则

  • 原则A:struct或者union的成员,第一个成员在偏移0的位置,之后的每个成员的起始位置必须是当前成员大小的整数倍
  • 原则B:如果结构体A含有结构体成员B,那么B的起始位置必须是B中最大元素大小整数倍地址(相当于先将嵌套结构体展开)
  • 原则C:结构体的总大小,必须是内部最大成员的整数倍

示例

  • 代码

    struct A {
        int a;
        char b;
        char c;
    };
    struct B {
        char b;
        int a;
        char c;
    };
    
    struct C {
        int a;
        char b[10];
        char c;
    };
    struct D {
        char b[10];
        int a;
        char c;
    };
    struct E {
        char b;
        char e;
        char f;
        int a;
        char c;
    };
    struct F {
        long long a;
        struct B b;
    };
    int main() {
        struct A a;
        struct B b;
        struct C c;
        struct D d;
        struct E e;
        struct F f;
        printf("char:%d,short:%d,int:%d,long long size %d\n",
               sizeof(char),sizeof(short),sizeof(int),sizeof(long long));
        printf("A size %d\n", sizeof(a));
        printf("B size %d\n", sizeof(b));
        printf("C size %d\n", sizeof(c));
        printf("D size %d\n", sizeof(d));
        printf("E size %d\n", sizeof(e));
        printf("F size %d\n", sizeof(f));
    }
    
  • 运行结果

    char:1,short:2,int:4,long long size 8
    A size 8
    B size 12
    C size 16
    D size 20
    E size 12
    F size 24
    

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容