欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

17- String 与 Array 分析

程序员文章站 2024-03-23 10:06:34
...

1.了解

汇编调试常用手段LLDB

  • 读取寄存器的值:

register read rax/格式(x/f/d )
register write rax 10
register read //所有寄存器

  • 读取内存地址:x/5xg

x 内存地址
x/3xw 3-显示3组数据
x-是16进制 /f是浮点/d是十进制
w(word)4个字节/ g(giant)-8个字节/b(byte)-1个字节/h(half)-两个字节

  • 打印函数调用栈

b t

  • 执行步骤

si
finish

从编码到启动APP

  • 小端:高地址存储高字节,低地址存储低字节
  • 大端:高地址存储低字节,低地址存储高字节

 17- String 与 Array 分析

内存大概分布图

  • 全局变量,放在数据段
  • 全局变量的地址在编译的那一刻就确认了(偏移地址固定)

17- String 与 Array 分析

2.关于 String 的思考

  1. 1 个 String 变量占用多少内存?
一个 String 变量内存占用16个字节
  1. 下面 2 个 String 变量,底层存储有什么不同?
// 字符串长度 <= 0xF, 字符串内容直接存放在 str1 变量的内存中
var str1 = “0123456789”

// 字符串长度 > 0xF, 字符串内容存放在 __TEXT.cstring 中(常量区)
// 字符串的地址值信息存放在 str2 变量的后8个字节中
var str2 = “0123456789ABCDEF”

3. 如果对 String 进行拼接操作,String 变量的存储会发生什么变化?

// 由于字符串长度 <= 0xF,所以字符串内容依然存放在str1变量的内存中
str1.append("ABCDE")
// 开辟堆空间
str1.append("F")

// 开辟堆空间
str2.append(“G")

3.关于Array的思考

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

        答:一个 Array 变量占用 8 个字节

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

        答:Array 变量的 8 个字节存放的是这个堆空间的地址值,数组中的数据存放在堆空间,且堆空间前32个字节存放堆空间的一些信息,后面的才是字符串的真实内容。

17- String 与 Array 分析

 

 

 

 

 

 

 

 

 

相关标签: Swift5.0笔记 ios

上一篇: 02-流程控制

下一篇: 数组坍塌问题