美文网首页
内存对齐原理

内存对齐原理

作者: 旅行者_sz | 来源:发表于2020-09-13 00:05 被阅读0次

前言:

属性内存占用说明

通过一段代码来说明一下内存对齐的现象:

struct StructOne {
    char a;         //1字节
    double b;       //8字节
    int c;          //4字节
    short d;        //2字节
} MyStruct1;

struct StructTwo {
    double b;       //8字节
    char a;         //1字节
    short d;        //2字节
    int c;         //4字节
} MyStruct2;
NSLog(@"%lu---%lu--", sizeof(MyStruct1), sizeof(MyStruct2));

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

为什么相同的结构体,只是交换了变量 ab 在结构体中的顺序他们的大小就改变了呢?这就是“内存对齐”的现象。

一、数据成员内存对齐规则

结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int为4字节,则要从4的整数倍地址开始存储。 min(当前开始的位置m n)m = 9 n = 4
9 10 11 12

二、结构体的内存对齐规则

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

  • 注:结构体的总大小,也就是sizeof的结果,.必须是其内部最大 成员的整数倍.不足的要补⻬

相关文章

  • iOS内存对齐

    这篇文章我们来探索一下iOS内存对齐的原理,在探索完内存对齐原理之后,你就会明白内存对齐的好处。 在讲述内存对齐时...

  • OC底层原理 05: 内存对齐原理

    主动已经是我对热爱东西表达的极限了 通过对结构体内存是如何对齐的?打开内存对齐原理的大门。 在探究内存对齐之前,先...

  • 内存对齐原理

    前言: 通过一段代码来说明一下内存对齐的现象: 打印结果为:24---16-- 为什么相同的结构体,只是交换了变量...

  • 内存对齐原理

    内存对齐之前需要掌握的一张图 内存对齐的目的 对于程序而言,一个变量的数据存储范围是在一个寻址步长范围内的话,这样...

  • 内存对齐原理

    内存对齐原则 1.结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方...

  • OC底层原理汇总

    OC底层原理(一).alloc实际调用流程分析OC底层原理(二).内存分配与内存对齐OC底层原理(三)、isa、对...

  • iOS--OC底层原理文章汇总

    OC底层原理01—alloc + init + new原理OC底层原理02—内存对齐OC底层原理03— isa探究...

  • 了解内存对齐原理

    对象的内存空间 首先创建一个Person类 实例化一个Person对象 调试对象地址的信息 我们可以正常输出字符串...

  • iOS 内存对齐原理

    计算机中内存空间是按照 byte 划分的,计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首...

  • iOS 内存对齐原理

    获取内存大小 第一种:sizeof The sizeof keyword gives the amount of ...

网友评论

      本文标题:内存对齐原理

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