alloc流程图

186 阅读1分钟

底层探索的三种方式

1.符号断点

按住control键,点击step info,进入断点,得到objc_alloc,添加符号断点

2.汇编跟流程

进入断点,选择Debug -> Debug Workflow -> Always Show Disassembly image.png 编译器优化 image.png

3.根据已知符号断点,确定未知

至少知道是alloc函数,添加符号断点alloc,查看。

根据源码-绘制alloc流程图

B90197BD-C629-42E7-A9E9-063DC06C8CC2.png

总结

1.cls->instanceSize:先计算出需要的内存空间大小,对象内存大小由成员变量决定。
2.calloc:向系统申请开辟内存,返回地址指针
3.obj->initInstanceIsa:关联到相应的类
4.字节对齐为(x + WORD_MASK) & ~WORD_MASK; WORD_MASK为7。内存对齐为(x + size_t(15)) & ~size_t(15)。