內(nèi)存分析
結(jié)構(gòu)體 類 值類型 引用類型
一: 匯編發(fā)展

二: 匯編語(yǔ)言種類

三: 常見(jiàn)指令

四: 寄存器

五: mov lea q是單位 8個(gè)bit

六: liulldb常見(jiàn)指令

七: 枚舉賦值內(nèi)存分析


八: 結(jié)構(gòu)體
1 定義結(jié)構(gòu)體
立即數(shù)大概等同于字面量
截屏2022-04-14 上午10.42.37.png
// 定義結(jié)構(gòu)體
struct Date {
var year: Int // 不設(shè)置默認(rèn)值是可以的
var month: Int
var day: Int
}
var date = Date(year: 2001, month: 01, day: 01)
print (date.year)
print (date.month)
print (date.day)
// 結(jié)構(gòu)體會(huì)自動(dòng)生成個(gè)初始化器
2 結(jié)構(gòu)體設(shè)置初始化值
不管設(shè)置不設(shè)置結(jié)構(gòu)體初始化值, 初始化時(shí)候必須保證所有值都初始化,否則編譯報(bào)錯(cuò)

3 結(jié)構(gòu)體設(shè)置可選類型 空也是默認(rèn)類型
截屏2022-04-14 上午10.46.31.png
4 自定義初始化器
你自己定義了, 就覆蓋了系統(tǒng)的, 只能調(diào)用自己的
截屏2022-04-14 上午10.48.37.png
5 結(jié)構(gòu)體內(nèi)存分析
截屏2022-04-14 上午10.54.16.png
// x.y各自占用8個(gè)字節(jié)
截屏2022-04-14 上午10.55.31.png
// x,y各自占用8個(gè)字節(jié), bool占用一個(gè) 合計(jì)17個(gè), 系統(tǒng)會(huì)有內(nèi)存對(duì)齊8位,補(bǔ)齊所以是24個(gè)
重點(diǎn): 結(jié)構(gòu)體初始化必須保證全部成員初始化完畢,類也如此
九: 類
1 初始化器, 不同于結(jié)構(gòu)體, 類不會(huì)自動(dòng)生成可以添加成員變量的初始化器
截屏2022-04-14 上午11.00.18.png
2 初始化類
1 類需要給所有變量指定默認(rèn)值 **重要
2 成員變量初始化完畢,會(huì)生產(chǎn)()初始化器
3 類初始化時(shí)候, 務(wù)必保證所有成員變量初始化完畢
截屏2022-04-14 上午11.02.20.png
3 結(jié)構(gòu)體和類的本質(zhì)區(qū)別
1 結(jié)構(gòu)體值類型, 賦值是內(nèi)容拷貝
2 類引用類型, 賦值是指針拷貝
截屏2022-04-14 下午1.32.48.png
分析:
1 函數(shù)地址存放在??臻g
2 point 值類型, 指針地址,內(nèi)容地址都存放在棧空間
3 size 引用類型, 指針地址存放在??臻g,內(nèi)容地址存放在堆空間
問(wèn)題, 結(jié)構(gòu)體存在哪? 看定義在哪?
1 定義在函數(shù)內(nèi): 棧空間
2 定義在類中: 堆空間
3 外面定義: 數(shù)據(jù)段
九: 值類型 引用類型
1值類型
值類型: 內(nèi)容拷貝, 新舊變量修改, 不互相影響
截屏2022-04-14 下午1.38.50.png
值類型賦值
編譯器優(yōu)化, 如果沒(méi)有修改操作 s1 s2指針指向的內(nèi)容地址, 可能是同一塊區(qū)域
截屏2022-04-14 下午1.41.37.png
截屏2022-04-14 下午1.43.52.png
2 引用類型
引用類型, 指針拷貝, 新變量修改會(huì)影響原變量的值
截屏2022-04-14 下午1.44.52.png
引用變量賦值
截屏2022-04-14 下午1.46.40.png
值類型& 引用類型 let
截屏2022-04-15 下午5.39.37.png
1 p: 屬于值類型, 成員變量存放在結(jié)構(gòu)體內(nèi)部, 結(jié)構(gòu)體占用16個(gè)字節(jié), 包含成員變量的內(nèi)存, p聲明let所以, 所以p的指向的內(nèi)存地址不能修改, p = Point(x:11, y:22) // 不能修改 x, y存放在結(jié)構(gòu)體內(nèi)部, p指向的內(nèi)存不能修改, 所以 x, y也不能修改
2 s屬于引用類型s占用8個(gè)字節(jié), 聲明let所以s指針指向的內(nèi)存地址不能修改, 但是width, height不存在s內(nèi)部, 所以可以修改
3 字符串, 數(shù)組都屬于值類型, 定義let內(nèi)存地址不能被修改













