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

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


关于实例化时,开辟内存的字节对齐_第1张图片
image.png

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

关于实例化时,开辟内存的字节对齐_第2张图片
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"
关于实例化时,开辟内存的字节对齐_第3张图片
image.png

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

你可能感兴趣的:(关于实例化时,开辟内存的字节对齐)