美文网首页
17-String与Array

17-String与Array

作者: 二斤寂寞 | 来源:发表于2023-04-13 11:49 被阅读0次

    关于String的思考

    • 1个String变量占用多少内存?

    • 下面2个String变量,底层存储有什么不同?

    var str1 = "0123456789"
    var str2 = "0123456789ABCDEF"
    
    • 如果对String进行拼接操作, String变量的存储会发生什么变化?
    str1.append("ABCDE")
    str1.append("F") 低 
    
    str2.append("G")                                
    

    ASCII码表:https://www.ascii-code.com/

    image.png

    汇编分析string本质:

    • 查看str1

      • 马哥小工具Mem可以查看内存地址。log之后是下图的

      • 进入汇编断点。log可以对照ASCII表进行查看 0-9 a-z对应ASCII

      • 前8个存储字符,后面存储长度。 (如果超过15个,怎么存储)

    image.png
    image.png
    • 查看str2

    会进行长度比较。

    image.png image.png

    从编码到启动APP

    image.png

    生成的Mach-O文件,通过MachOView 软件查看 放在Section64( _TEXT,_cstring)

    dyld_stub_binder

    • 符号的延迟绑定通过dyld_stub_binder完成

    • jmpq *0xb31(%rip)格式的汇编指令

    占用6个字节

    image.png
    • 字符串拼接
    image.png image.png

    关于Array的思考

      public struct Array<Element>
      var arr = [1, 2, 3, 4]
    
    • 1个Array变量占用多少内存?

    • 数组中的数据存放在哪里?

    image.png

    8个字节,存放的是一个地址值。堆空间。

    相关文章

      网友评论

          本文标题:17-String与Array

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