關(guān)于String的思考
1個(gè)String變量占用多少內(nèi)存?
下面2個(gè)String變量,底層存儲(chǔ)有什么不同?
var str1 = "0123456789"
var str2 = "0123456789ABCDEF"
- 如果對(duì)String進(jìn)行拼接操作, String變量的存儲(chǔ)會(huì)發(fā)生什么變化?
str1.append("ABCDE")
str1.append("F") 低
str2.append("G")
ASCII碼表:https://www.ascii-code.com/

image.png
匯編分析string本質(zhì):
-
查看str1
馬哥小工具M(jìn)em可以查看內(nèi)存地址。log之后是下圖的
進(jìn)入?yún)R編斷點(diǎn)。log可以對(duì)照ASCII表進(jìn)行查看 0-9 a-z對(duì)應(yīng)ASCII
前8個(gè)存儲(chǔ)字符,后面存儲(chǔ)長(zhǎng)度。 (如果超過(guò)15個(gè),怎么存儲(chǔ))

image.png

image.png
- 查看str2
會(huì)進(jìn)行長(zhǎng)度比較。

image.png

image.png
從編碼到啟動(dòng)APP

image.png
生成的Mach-O文件,通過(guò)MachOView 軟件查看 放在Section64( _TEXT,_cstring)
dyld_stub_binder
符號(hào)的延遲綁定通過(guò)dyld_stub_binder完成
jmpq *0xb31(%rip)格式的匯編指令
□ 占用6個(gè)字節(jié)

image.png
- 字符串拼接

image.png

image.png
關(guān)于Array的思考
public struct Array<Element>
var arr = [1, 2, 3, 4]
1個(gè)Array變量占用多少內(nèi)存?
數(shù)組中的數(shù)據(jù)存放在哪里?

image.png
8個(gè)字節(jié),存放的是一個(gè)地址值。堆空間。