美文网首页
结构体内存对齐

结构体内存对齐

作者: 浪的出名 | 来源:发表于2020-09-08 17:44 被阅读0次

结构体的内存对齐操作

结构体不像数组,结构体中可以存放不同类型的数据,它的大小也不是简单的各个数据成员大小之和,限于读取内存的要求,而是每个成员在内存中的存储都要按照一定偏移量来存储,根据类型的不同,每个成员都要按照一定的对齐数进行对齐存储,最后整个结构体的大小也要按照一定的对齐数进行对齐。

结构体的内存对齐规则如下:

第一个成员的首地址为0
每个成员的首地址是自身大小的整数倍
结构体的内存总大小是其成员中所含最大类型的整数倍
  • 不同类型所占的大小


    page3image8887824.png
  • 通过一个例子来验证

struct Stru1 {
    NSString *str;  [0-7] 8
    int a;  [8 - 11] 4
    char b; [12 - 13]  1
    long c; [16 - 23] 8 (14不是8的整数倍,要偏移到16)
}; //得出该结构体的大小为24
  • 结构体嵌套的情况
struct Stru1 {
    NSString *str;
    int a;
    char b;
    long c;
};

struct Stru2 {
    int a1; [0-3] 4
    NSString *str1; [8-15] 8  (4不是8的整数倍,要偏移到8)
    char b1; [16-17] 1
    long c1; [24-31] 8 (17不是8的整数倍,要偏移到24)
    struct Stru1 s; [32 - xx](32是Stru1里面最大类型的整数倍)
};// 所以Stru2的大小就是32+24
  • 打印的结构也是如此
NSLog(@"%lu--%lu",sizeof(struct Stru1),sizeof(struct Stru2));
24--56

相关文章

  • 结构体

    1.结构体 2.结构体的内存对齐模式 编译器在编译一个结构的时候采用内存对齐模式,结构体总是以最大的成员最为对齐单...

  • ndk-基础知识

    数组和指针,数组指针,指针数组 结构体 内存对齐 内存对齐 结构体大小 S5DUD10BN083MHEJEX7TP...

  • 内存对齐详解

    1、什么是内存对齐假设我们声明两个变量: 2、结构体内存对齐规则 结构体所占用的内存与其成员在结构体中的声明顺序有...

  • iOS原理探索02-- 内存对齐

    结构体内存对齐 我们首先定义两个结构体,分别计算他们的内存大小,并讨论内存对齐原理 从两个结构体来看两者没啥大的区...

  • iOS 内存对齐

    一、结构体内存对齐 1.1 结构体内存对齐三大原则 数据成员对⻬规则结构体(struct)或联合体(union)的...

  • 从结构体内存对齐到OC对象内存对齐

    1、结构体内存对齐 结构体对齐规则:1:数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,...

  • iOS 内存对齐:结构体继承和结构体作为另一个结构体成员变量情况

    内存对齐规则就不赘述了,这里讨论下继承和结构体作为另一个结构体成员变量的情况下,结构体内如何进行内存对齐。以下测试...

  • 结构体

    结构体有名定义 无名定义 结构体嵌套定义 结构体内存对齐 结构体成员初始化 结构体变量引用 结构体的有名定义:直白...

  • 第一天,内存对齐

    一对齐规则: 1.非结构体类型 32位 4字节对齐,64位 8字节对齐 2.结构体类型 以结构体中,最大内存的整数...

  • iOS 结构体内存对齐浅析

    什么是内存对齐 内存对齐是一种在计算机内存中排列数据、访问数据的一种方式。它包含基本数据对齐和结构体数据对齐 。 ...

网友评论

      本文标题:结构体内存对齐

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