| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> iOS底层-alloc (1) -> 正文阅读 |
|
[移动开发]iOS底层-alloc (1) |
内容的总结专栏 序作为一名iOS开发人员,在平时开发工作中,所有的对象我们使用最多的是 初探我们先来看下面的代码
打印内容:
可见,在? 注:细心的你一定注意到了,p1、p2、p3都是相差了8个字节。 这是因为,指针占内存空间大小为8字节,p1、p2、p3 都是从栈内存空间上申请的,且栈内存空间是连续的。同时,他们都指向了同一个内存地址。 那么,? 首先,第一反应是,我们要Jump to Definition, 结果,Xcode中并不能直接跳转后显示其底层实现,所以 并不是我们想要的。 中探接下来,我们通过三种方法来一探究竟: 方法1既然不可以直接跳转到API文档来查看 接下来我们就来到此处 一个名为 libobjc.A.dylib 的库,至此,我们就应该要去找苹果开源的库,以寻找我们想要的答案。 方法2我们也可以直接在 我们可以看到一个 objc_alloc 的函数方法到调用,此时,我们再下一个符号断点,同样的,我们还是找到了 libobjc.A.dylib 这个库。 方法3此外,我们还是可以通过汇编来调试和查找相应的实现内容,断点依然是在
找到 callq 方法调用那一行, 接着, step into 进去, 我们找到了 objc_alloc 的调用, 之后的操作和 方法2的后续步骤一样,最终,可以找到 libobjc.A.dylib 这个库。 深探下载源码??objc4-818.2 接下来对源码进行分析, alloc方法会调用到此处 接着是 调用? 之后调用 到? 跟着断点会来到? 之后是? 此方法是重点
第一处是:
内部实现如下:?其中在计算内存空间大小时,会调用? 最终会调用?
可见, 系统会进行 16字节 的对齐操作,也就是说,一个对象所占用的内存大小至少是16字节。 在这里 我们举个例子: size_t x = 8; 那么 align16操作后的大小计算过程如下:
第二处是:
第三处是:
总结:所以,最后我们总结一下, alloc的底层调用流程如下: 就是这样一个流程,系统就帮我们创建出来一个类对象。 补充
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 5:32:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |