美文网首页
关于实例化时,开辟内存的字节对齐

关于实例化时,开辟内存的字节对齐

作者: LoZR | 来源:发表于2019-02-20 15:37 被阅读0次

我们都知道每当创建一个对象的时候都会开辟一片内存,但内存分配的时候实际是做了什么处理呢?今天粗略写一下关于字节对齐的概念。
首先创建一个类,内容为:


image.png

先注释一下每个属性实际是占多少内存,还有isa为什么会存在?我们都知道 万物皆对象 ,每个对象都会有一个 isa 指针,然而这个东东也是需要占内存的,如下图打印:

image.png
image.png

我们对比一下LGPerson 的属性排序是 isa,age,name,height和上图的打印的

// age
p 0x12
(int) $3 = 18   
// height
p 0xb9
(int) $4 = 185 
// name
 p (NSString *)0x010daa3080
(__NSCFConstantString *) $5 = 0x000000010daa3080 @"cooci"
image.png

至于为什么不是在 蓝色框 存 4bit的 name、换行再放 4bit 的name;
个人理解是系统为了效率,不把补数据截断,也防止数据丢失并提高了编译速度的原因吧。
以上内容纯粹个人见解,仅用于分享交流;如有描述不当之处,欢迎指出。

相关文章

  • 关于实例化时,开辟内存的字节对齐

    我们都知道每当创建一个对象的时候都会开辟一片内存,但内存分配的时候实际是做了什么处理呢?今天粗略写一下关于字节对齐...

  • iOS结构体内存对齐原则初探

    为什么OC对象在开辟内存的时候会有内存对齐原则,在对象申请内存的时候是16字节对齐的,在真正开辟所需要的内存时时8...

  • iOS的16字节对齐

    那什么是实例对齐? 简单的说就是在开辟一块内存空间的时候,只能开辟16的整数倍字节大小的内存空间。这样以16位为单...

  • 2.iOS底层学习之内存对齐

    学习了内存对齐之后的疑问?? 1.为啥要内存对齐?2.内存对齐的规则?3.内存对齐实例分析。 内存对齐的目的 上网...

  • 为什么要内存对齐?

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

  • iOS 技术

    结构体的字节对齐和OC对象的字节对齐? instance(实例对象)、class(类对象)、meta-class(...

  • sizeof与字节对齐

    参考 【面试题】sizeof引发的血案编译器与字节对齐c 语言字节对齐问题详解C/C++内存对齐内存存取粒度C和C...

  • #pragma pack(n)的使用

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

  • 内存对齐

    内存对齐 什么叫内存对齐内存对齐就是按照特定的规则对数据进行存储,一般编译器按照8字节对齐标准处理。内存对齐一般用...

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

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

网友评论

      本文标题:关于实例化时,开辟内存的字节对齐

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