关于String的思考
-
1个String变量占用多少内存?
-
下面2个String变量,底层存储有什么不同?
var str1 = "0123456789"
var str2 = "0123456789ABCDEF"
- 如果对String进行拼接操作, String变量的存储会发生什么变化?
str1.append("ABCDE")
str1.append("F") 低
str2.append("G")
image.pngASCII码表:https://www.ascii-code.com/
汇编分析string本质:
-
查看str1
-
马哥小工具Mem可以查看内存地址。log之后是下图的
-
进入汇编断点。log可以对照ASCII表进行查看 0-9 a-z对应ASCII
-
前8个存储字符,后面存储长度。 (如果超过15个,怎么存储)
-
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- 字符串拼接
关于Array的思考
public struct Array<Element>
var arr = [1, 2, 3, 4]
-
1个Array变量占用多少内存?
-
数组中的数据存放在哪里?
8个字节,存放的是一个地址值。堆空间。
网友评论