美文网首页
C语言结构体对齐

C语言结构体对齐

作者: 第八区 | 来源:发表于2017-07-05 14:40 被阅读102次

    对齐原则

    • 原则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
      

    相关文章

      网友评论

          本文标题:C语言结构体对齐

          本文链接:https://www.haomeiwen.com/subject/gdrqhxtx.html