★ iOS高級(jí):Swift入門精講③ 01 swift編程-04-枚舉-03關(guān)聯(lián)值內(nèi)存分布

前言:

僅為視頻學(xué)習(xí)筆記

MemoryLayout

MemoryLayout怎么用呢仲墨?

★可以使用MemoryLayout獲取數(shù)據(jù)類型占用的內(nèi)存大小

例-1

MemoryLayout是可以寫成泛型押搪。

var age = 10

那么,我們想知道age這個(gè)變量占用多少內(nèi)存茅坛,那么怎么辦呢观挎?這個(gè)用法其實(shí)也非常簡單,如下:

 MemoryLayout.size(ofValue: age)      // 8
 MemoryLayout.stride(ofValue: age)    // 8
 MemoryLayout.alignment(ofValue: age) // 8

我們會(huì)發(fā)現(xiàn)挪凑,打印出來的跟 例-1所打印出來的一樣,因?yàn)閍ge它就是Int類型夯巷。所以 例-1跟上面代碼赛惩,打印出來是一樣的,百分百是等價(jià)的趁餐。


看一下size和stride有什么區(qū)別喷兼?要看出它們的區(qū)別,當(dāng)然要搞些不同的類型才能看出來后雷。比如說季惯,就拿我們這個(gè)枚舉來說,你也許很好奇臀突,這個(gè)枚舉變量勉抓,到底占用多少內(nèi)存呢?


Password是密碼候学,一個(gè)是數(shù)字密碼藕筋,一個(gè)就是另外一種密碼。

swift編碼規(guī)范里面梳码,枚舉的類型首字母念逞,是大寫的,采用駝峰標(biāo)示边翁,它里面的所有成員,建議小寫開頭硕盹。

 var pwd = Password.number(5, 6, 4, 7)  // 占用32字節(jié)
 pwd = .other

比如符匾,上面代碼,我們猜測(cè)一下瘩例, 第一行啊胶,和第二行,各占多少內(nèi)存呢垛贤? 也就是焰坪,我想知道 pwd 這個(gè)變量,編譯器給它分配多少個(gè)內(nèi)存呢聘惦?

首先某饰,先下一個(gè)定論,你看,我先定義了一個(gè)pwd變量黔漂,那么這個(gè)變量呢诫尽?一個(gè)是賦得值是 Password.number(5, 6, 4, 7),之前說過炬守,像這種關(guān)聯(lián)值(5, 6, 4, 7) 是直接存儲(chǔ)在pwd這個(gè)變量里面,所以說你這個(gè)變量內(nèi)存肯定裝得下這4個(gè)(5, 6, 4, 7) 牧嫉,那么每一個(gè)Int類型占8個(gè)字節(jié),那你4個(gè)减途,4x8 = 32 ,32個(gè)字節(jié)酣藻。所以pwd 這個(gè)變量至少是32個(gè)字節(jié)。

那么鳍置,現(xiàn)在我假定var pwd = Password.number(5, 6, 4, 7)是32個(gè)字節(jié) 辽剧,那么pwd = .other這個(gè)位置呢?思考一下墓捻,肯定是你 var pwd = Password.number(5, 6, 4, 7)這行占用了多少字節(jié)pwd = .other這行占用多少字節(jié)抖仅。也就是說,var pwd = Password.number(5, 6, 4, 7)是32個(gè)字節(jié)砖第,那么到后邊的時(shí)候仍然是32個(gè)字節(jié)撤卢。只是用32個(gè)字節(jié)存儲(chǔ).other這個(gè)家伙而已。

不可能說梧兼,根據(jù)我賦的值不同放吩,到時(shí)候我動(dòng)態(tài)改變內(nèi)存,這樣多麻煩羽杰。

變量內(nèi)存已經(jīng)開辟了32個(gè)字節(jié)渡紫,上面占用32個(gè)字節(jié),下面也占用32個(gè)字節(jié)考赛,變量內(nèi)存是不會(huì)動(dòng)態(tài)改變的惕澎,沒用也要占用在內(nèi)存里面。

因?yàn)檠罩瑁灰鉷wd是Password類型的唧喉,那么它的大小已經(jīng)固定了,就是這么大忍抽。但是八孝,你以后是存儲(chǔ)number(Int,Int,Int,Int)這個(gè) 還是 other取決于你自己。

下面我們看究竟占多少呢鸠项?

如上面方法干跛,得知,size和stride是不一樣的祟绊。一個(gè)是33楼入,一個(gè)是40哥捕,到底是哪個(gè)才對(duì)呢?

先說一下size和stride有什么區(qū)別:

stride這個(gè)家伙是范圍的意思浅辙,打印出來這個(gè)40是什么意思呢扭弧,這個(gè)就是這個(gè)變量實(shí)際占用的空間大小,也就是說這個(gè)就是它真正的所要占用的空間大小记舆。

size是什么呢鸽捻? size是實(shí)際用到的空間大小,也就是說泽腮,實(shí)際可能用到的大小御蒲。相當(dāng)于就是有7個(gè)字節(jié)是浪費(fèi)掉的。有7個(gè)字節(jié)你是永遠(yuǎn)用不到的诊赊。

再來看alignment我們這個(gè)內(nèi)存對(duì)齊參數(shù)厚满,很明顯是8。那就是意味著碧磅,你最后占用的內(nèi)存大小肯定是8的倍數(shù)碘箍,所以說stride這個(gè)家伙,系統(tǒng)分配給它的就是40個(gè)字節(jié)鲸郊,這40個(gè)字節(jié)丰榴,其中有33個(gè)字節(jié),是拿來實(shí)際放東西的秆撮,那么33個(gè)字節(jié)四濒,大家可以想得到分別拿來放什么呢?其中肯定有32個(gè)字節(jié)职辨,是用來放(Int,Int,Int,Int)這個(gè)家伙盗蟆,那么最后一個(gè)字節(jié),應(yīng)該是拿來放other這個(gè)家伙舒裤。

40這個(gè)內(nèi)存不是32 + 8喳资, 也就是說,我們最終算出來的這個(gè)40腾供,不是32 + 8骨饿。
這個(gè)40是怎么來的?首先你先存儲(chǔ)這4個(gè)家伙(Int,Int,Int,Int) 台腥,那你肯定要32個(gè)字節(jié),other這個(gè)家伙其實(shí)用1個(gè)字節(jié)就搞定了绒北,所以你真正要用到的就是33個(gè)字節(jié)黎侈,但是由于我們這個(gè)alignment內(nèi)存對(duì)齊呢,是8闷游,所以你要保證最終分配給你的內(nèi)存大小是8的倍數(shù)峻汉,所以說33不夠贴汪,要補(bǔ)齊為40。所以休吠,最終分給你的是40扳埂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瘤礁,隨后出現(xiàn)的幾起案子阳懂,更是在濱河造成了極大的恐慌,老刑警劉巖柜思,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岩调,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赡盘,警方通過查閱死者的電腦和手機(jī)号枕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陨享,“玉大人葱淳,你說我怎么就攤上這事∨坠茫” “怎么了赞厕?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長途戒。 經(jīng)常有香客問我坑傅,道長,這世上最難降的妖魔是什么喷斋? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任唁毒,我火速辦了婚禮,結(jié)果婚禮上星爪,老公的妹妹穿的比我還像新娘浆西。我一直安慰自己,他們只是感情好顽腾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布近零。 她就那樣靜靜地躺著,像睡著了一般抄肖。 火紅的嫁衣襯著肌膚如雪久信。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天漓摩,我揣著相機(jī)與錄音裙士,去河邊找鬼。 笑死管毙,一個(gè)胖子當(dāng)著我的面吹牛腿椎,可吹牛的內(nèi)容都是我干的桌硫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼啃炸,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼铆隘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起南用,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤膀钠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后训枢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體托修,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年恒界,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了睦刃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡十酣,死狀恐怖涩拙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耸采,我是刑警寧澤兴泥,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站虾宇,受9級(jí)特大地震影響搓彻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘱朽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一旭贬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搪泳,春花似錦稀轨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至艰赞,卻和暖如春佣谐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背方妖。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工台谍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓趁蕊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仔役。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掷伙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345