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
- 小端:高地址存储高字节,低地址存储低字节
- 大端:高地址存储低字节,低地址存储高字节
内存大概分布图
- 全局变量,放在数据段
- 全局变量的地址在编译的那一刻就确认了(偏移地址固定)
2.关于 String 的思考
- 1 个 String 变量占用多少内存?
一个 String 变量内存占用16个字节
- 下面 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 分析
-
C#中String与string的区别分析
-
PHP中isset与array_key_exists的区别实例分析_PHP
-
PHP中addslashes与mysql_escape_string的区别分析
-
PHP中isset与array_key_exists的区别实例分析_PHP
-
PHP中addslashes与mysql_escape_string的区别分析,mysqlescapestring
-
PHP中addslashes与mysql_escape_string的区别分析,mysqlescapestring_PHP教程
-
PHP中array_map与array_column之间的关系分析
-
PHP中isset与array_key_exists的区别实例分析_PHP教程
-
PHP合并数组+与array_merge的区别分析_PHP教程