美文网首页
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语言结构体对齐(内存对齐问题)

    解析C语言结构体对齐(内存对齐问题) C语言结构体对齐也是老生常谈的话题了。基本上是面试题的必考题。内容虽然很基础...

  • c语言结构体对齐

    1.什么是字节对齐 结构体里面一般会按照某种规则去进行字节对齐默认规则如下:对齐是按照结构体中长度最长的变量来对齐...

  • C语言结构体对齐

    对齐原则 原则A:struct或者union的成员,第一个成员在偏移0的位置,之后的每个成员的起始位置必须是当前成...

  • 结构体内存对齐

    前言 OC语言底层是基于c和c++的,而NSObject在底层也是用结构体实现的,所以了解了结构体的内存对齐问题对...

  • 数据结构 -- 共用体Union

    在数据结构 -- 结构体Struct一文中详细介绍了结构体的定义以及内存对齐。在C语言中,还有另外一种和结构体非常...

  • [044]C语言基础-结构体对齐

    一、什么是结构体对齐? 1.1 废话不多说,先来个代码 1.2 运行结果 1.3 疑问 为什么A和B的sizeof...

  • C 结构体对齐

    转载 结构体对齐详解 结构体数据成员对齐的意义 许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会...

  • C语言中内存对其规则

    C语言中结构体内存对齐规则 对齐规则: 内存偏移为该数据类型的最小整数倍 总体占用内存为结构体中最大数据类型的整数...

  • C语言和OC的结构体(struct)

    Struct(结构体) 1.结构体定义 2.结构体变量 3.结构体数组 4.C语言结构体指针 5.C语言共用体 6...

  • 内存

    1. 结构体字节对齐 在C语言里,结构体所占的内存是连续的,但是各个成员之间的地址不一定是连续的。所以就出现了"字...

网友评论

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

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