我们都知道每当创建一个对象的时候都会开辟一片内存,但内存分配的时候实际是做了什么处理呢?今天粗略写一下关于字节对齐的概念。
首先创建一个类,内容为:
image.png
先注释一下每个属性实际是占多少内存,还有isa
为什么会存在?我们都知道 万物皆对象 ,每个对象都会有一个 isa
指针,然而这个东东也是需要占内存的,如下图打印:
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
;
个人理解是系统为了效率,不把补数据截断,也防止数据丢失并提高了编译速度的原因吧。
以上内容纯粹个人见解,仅用于分享交流;如有描述不当之处,欢迎指出。
网友评论