【iOS】——内存对齐-内存优化(属性重排)

时间:2024-07-19 12:22:23

结构体内存大小与结构体成员内存大小的顺序有关:

如果是结构体中数据成员是根据内存从小到大的顺序定义的,根据内存对齐规则来计算结构体内存大小,需要增加有较大的内存padding即内存占位符,才能满足内存对齐规则,比较浪费内存

如果是结构体中数据成员是根据内存从大到小的顺序定义的,根据内存对齐规则来计算结构体内存大小,我们只需要补齐少量内存padding即可满足堆存对齐规则,这种方式就是苹果中采用的,利用空间换时间,将类中的属性进行重排,来达到优化内存的目的

在字节对齐算法中,对齐的主要是对象,对象的本质是objc_object结构体。

对于一个对象来说,其真正的对齐方式8字节对齐,8字节对齐已经足够满足对象的需求了

apple系统为了防止一切的容错,采用的是16字节对齐的内存,主要是因为采用8字节对齐时,两个对象的内存会紧挨着,显得比较紧凑,而16字节比较宽松,利于苹果以后的扩展。