美文网首页
iOS 内存字节对齐计算方式

iOS 内存字节对齐计算方式

作者: Mage | 来源:发表于2019-05-07 12:28 被阅读0次

字节对齐有三原则:

1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。

2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)

3:收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的整数倍.不足的要补齐.

例子

struct StructOne {
    char a;         //1字节 规则1[0]
    double b;       //8字节 规则2[8-15]
    int c;          //4字节 规则2[16-19]
    short d;        //2字节 规则2[20-22]  规则3补齐[23]
} MyStruct1;

struct StructTwo {
    double b;       //8字节 规则1[0-7]
    char a;         //1字节 规则1[8]
    int c;          //4字节 规则1[12-15]
    short d;        //2字节 规则1[16-17]    规则3补齐[18-23]
} MyStruct2;

struct StructThree {
    double b;       //8字节 规则1[0-7]
    char a;         //1字节 规则1[8] 
    short d;        //2字节 规则1[10-11]
    int c;          //4字节 规则1[12-15]
} MyStruct3;

struct StructFour {
    double b;        //8字节 规则1[0-7]
    char a;          //1字节 规则1[8]
    short d;         //2字节 规则1[10-11]
    struct StructThree c;//16字节 规则2[16-31]
} MyStruct4;

NSLog(@"%lu---%lu--%lu--%lu", sizeof(MyStruct1), sizeof(MyStruct2), sizeof(MyStruct3), sizeof(MyStruct4));

打印结果: 24---24--16--32

参考资料
快速弄懂内存字节对齐
iOS 内存字节对齐

相关文章

  • iOS 内存字节对齐计算方式

    字节对齐有三原则: 1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放...

  • 为什么要内存对齐?

    一. 什么是内存对齐(Memory alignment),也叫字节对齐 在计算机中,内存是按 字节(byte, 1...

  • #pragma pack(n)的使用

    pragma pack(n)用于修改内存对齐方式,n表示n字节对齐

  • 内存对齐

    内存对齐,或者说字节对齐,是代码编译后在内存的布局与使用方式。现代计算机一般是32比特或64比特地址对齐,如果要访...

  • iOS底层 - 内存字节的对齐规则

    要了解内存对齐的规则,首先我们要先知道什么是内存对齐。 内存字节对齐的概念: 计算机中内存空间是按照byte划分的...

  • OC底层原理三:内存对齐分析

    获取内存大小 上一篇我们简单的提了下内存字节对齐以及为什么要内存字节对齐,那么我们首先看下有什么方式可以获取内存大...

  • iOS底层之内存对齐算法解析

    目前但凡一个iOS岗面试都会问个内存对齐问题,那么什么是字节对齐?成员变量对齐和对象内存对齐有什么区别?今天我来为...

  • iOS 内存字节对齐

    通过一段代码来描述内存对齐的现象。 上述代码打印出来的结果为:24,16 为什么相同的结构体,只是交换了变量 ab...

  • iOS 内存字节对齐

    一、代码 Demo 可以看到 Struct1、Struct2、Struct3 的成员变量的数据类型都是相同的,仅仅...

  • C++中的字节对齐

    1.C++中的字节对齐 字节对齐解释:现代计算机中内存空间都是按照字节划分的,从理论上来说对任何类型变量的访问可以...

网友评论

      本文标题:iOS 内存字节对齐计算方式

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