iOS 底层探索篇 —— 内存字节对齐分析

LLVM拦截优化

上一篇说到alloc流程,第一步应该是alloc方法,那么实际上是不是这样呢?我们验证一下:
我们在alloc的地方打个断点,运行一下:
在这里插入图片描述
打开汇编:
在这里插入图片描述
发现这里实际上走的是objc_alloc,这是为什么呢?
我们搜索一下objc_alloc,发现在objc-runtime-new.mm文件中发现这样一个fixupMessageRef函数,发现当msgSEL等于alloc的时候,就会把msg的实现改为objc_alloc.
在这里插入图片描述
寻找一下是哪里调用的fixupMessageRef,发现是在_read_images方法里面。
在这里插入图片描述
我们看到,fixupMessageRef是有问题的时候,才去修改,那么alloc没有问题的时候为什么也是调用objc_alloc呢?如果在readImage之前,那么说明可能是在编译的时候就做了处理,所以这里去看一下llvm源码
接下来在llvm源码中搜索objc_alloc,看到了这样一段注释:
在这里插入图片描述
就是当这个方法返回true的时候,alloc会被改为objc_alloc, allocWithZone:nil 会被改为objc_allocWithZone。
来看一下这个方法,得知什么时候会返回true,发现是用version来进行判断的。
在这里插入图片描述
继续往下看,发现了这样一段代码。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值