美文网首页Swift
Swift Day13 对于 String 的内存结构体探索

Swift Day13 对于 String 的内存结构体探索

作者: 望穿秋水小作坊 | 来源:发表于2020-12-13 09:56 被阅读0次
1. 从编码到启动 app 的过程?(源码→可执行文件→内存)这三个点回答
过程
2. 思考下图中的 Swift.String.init() 方法是存放在哪里?(Mach-O 还是 动态库)
示例代码
  • 这是Swift 的官方函数,一般并不存放在 Mach-O 文件中,苹果使用 共享动态库技术 ,将它们存放在了统一的动态库中
3. 思考:Swift.String.init() 这样的官方方法调用,我们在使用汇编跟进去的时候,经常会看到 dyld_stub_binder 函数,这个函数是干什么的呢?
dyld_stub_binder
  • stub 一般翻译为 符号
  • dyld_stub_binder 其实是一个符号绑定的过程
  • 前面我们了解到,Swift 的官方函数Swift.String.init() 其实都是放在 动态库中,所以我们程序在编译的时候并不知道Swift.String.init() 函数的具体地址,但是编译阶段必须确定一个调用地址,所以编译阶段写的 Swift.String.init() 地址是一个桥接地址
  • 我们在程序运行时,必须知道 Swift.String.init() 的真实地址,这就是 dyld_stub_binder 的作用了,会把真实地址找到,并且进行绑定。
4. 思考如何侧面证明上面对 dyld_stub_binder 说法呢?
两个Swift.String.init()

-上图中有两个Swift.String.init(),如果汇编跟进去,发现只有第一个会调用 dyld_stub_binder

  • 因为 符号绑定懒加载的,只有调用了才会进行绑定,并且只需要绑定一次
5. 最终可以得到,对于 String 字符串,会出现三个区域(数据区、常量区、堆区),分别说明怎么样的 String 会出现在对应区域?
字符串存放规律总结

相关文章

  • Swift Day13 对于 String 的内存结构体探索

    1. 从编码到启动 app 的过程?(源码→可执行文件→内存)这三个点回答 2. 思考下图中的 Swift.Str...

  • 04-Swift 字符串的使用

    一、字符串简介 是一个结构体,结构体的性能更高; String 支持直接遍历; Swift 提供了 NSStrin...

  • # 字符串

    在 Swift 中绝大多数的情况下,推荐使用 String 类型 String 是一个结构体,性能更高String...

  • Swift - String、Array的内存分配情况

    在Swift中,String和Array是结构体类型,而结构体是值类型,值类型的内容就放在自身变量中,自身变量的大...

  • Swift 结构体和类

    结构体 关键字struct 在 Swift 标准库中,比如Bool、Int、Double、 String、Arra...

  • Swift中String与NSString的区别和使用

    根本区别:String是结构体,NSString是类 在Swift中,结构体是值类型,值类型被赋予给一个变量、常量...

  • Swift 值类型和引用类型

    一、值语义Swift的基本类型(Array,Dictionary, Int, String等)都是用结构体实现的,...

  • iOS-内存对齐

    先上个图,待会计算内存时会用到。 hxdm,已知iOS对象的本质是结构体,所以探索内存对齐当然是从结构体开始啦。来...

  • Swift 快速入门(字符串)

    在 Swift 中绝大多数的情况下,推荐使用 String 类型 String 是一个结构体,性能更高 Strin...

  • Swift基础语法(二)

    swift基础语法(一)swift基础语法二主要讲数据类型 1.字符串 1.在swift中String是一个结构体...

网友评论

    本文标题:Swift Day13 对于 String 的内存结构体探索

    本文链接:https://www.haomeiwen.com/subject/jkpugktx.html