Rust編程知識(shí)拾遺:內(nèi)存布局

1缔恳、每種類型都有一個(gè)數(shù)據(jù)對(duì)齊屬性醉锄。在X86平臺(tái)上u64和f64都是按照32位對(duì)齊的奕坟。

2、一種類型的大小是它對(duì)齊屬性的整數(shù)倍矮湘,這保證了這種類型的值在數(shù)組中的偏移量都是其類型尺寸的整數(shù)倍答恶,可以按照偏移量進(jìn)行索引小作。需要注意的是具则,動(dòng)態(tài)尺寸類型的大小和對(duì)齊可能無(wú)法靜態(tài)獲取。

3啦撮、結(jié)構(gòu)體的對(duì)齊屬性等于它所有成員的對(duì)齊屬性中最大的那個(gè)谭网。Rust會(huì)在必要的位置填充空白數(shù)據(jù),以保證每一個(gè)成員都正確地對(duì)齊赃春,同時(shí)整個(gè)類型的尺寸是對(duì)齊屬性的整數(shù)倍愉择。

例子:

struct  A { 
    a: u8, 
    b: u32, 
    c:u16, 
}

會(huì)填充為:

struct  A { 
    a: u8, 
    _pad1: [u8; 3], // 為了對(duì)齊b 
    b: u32, 
    c: u16, 
    _pad2: [u8; 2], // 保證整體類型尺寸是4的倍數(shù) 
}

4、注意點(diǎn)织中,兩個(gè)同樣類型的復(fù)合類型其分布規(guī)則并不一定一塵不變锥涕。例子:

struct  A { 
    a: i32, 
    b: u64, 
} 
struct  B { 
    a: i32, 
    b: u64, 
}

Rust中不保證A的實(shí)例和B的實(shí)例有同樣的數(shù)據(jù)填充和成員順序。

原因:Rust編譯器會(huì)進(jìn)行優(yōu)化狭吼。如下:

struct  Foo<T, U> { 
    count: u16, 
    data1: T, 
    data2: U, 
}

對(duì)于上面的泛型結(jié)構(gòu)體层坠,F(xiàn)oo<u32, u16>和Foo<u16, u32>按照內(nèi)存優(yōu)化的原則要求兩者順序不一樣。

5刁笙、求解結(jié)構(gòu)體的大小
使用std::mem破花,有兩種方法,分布是size_of_val和size_of疲吸,例子如下:

use std::mem;
struct A {
    a: u8,
    b: u16,
}

fn main() {
    let aa = A {a: 1, b:2};
    println!("size = {}", mem::size_of_val(&aa));
    println!("size = {}", mem::size_of::<A>());
    println!("Hello, world!");
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末座每,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子摘悴,更是在濱河造成了極大的恐慌峭梳,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹂喻,死亡現(xiàn)場(chǎng)離奇詭異葱椭,居然都是意外死亡捂寿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門挫以,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)者蠕,“玉大人窃祝,你說(shuō)我怎么就攤上這事掐松。” “怎么了粪小?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵大磺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我探膊,道長(zhǎng)杠愧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任逞壁,我火速辦了婚禮流济,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腌闯。我一直安慰自己绳瘟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布姿骏。 她就那樣靜靜地躺著糖声,像睡著了一般。 火紅的嫁衣襯著肌膚如雪分瘦。 梳的紋絲不亂的頭發(fā)上蘸泻,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音嘲玫,去河邊找鬼悦施。 笑死,一個(gè)胖子當(dāng)著我的面吹牛去团,可吹牛的內(nèi)容都是我干的歼争。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼渗勘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沐绒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起旺坠,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤乔遮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后取刃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹋肮,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡出刷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坯辩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馁龟。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漆魔,靈堂內(nèi)的尸體忽然破棺而出坷檩,到底是詐尸還是另有隱情,我是刑警寧澤改抡,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布矢炼,位于F島的核電站,受9級(jí)特大地震影響阿纤,放射性物質(zhì)發(fā)生泄漏句灌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一欠拾、第九天 我趴在偏房一處隱蔽的房頂上張望胰锌。 院中可真熱鬧,春花似錦藐窄、人聲如沸资昧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)榛搔。三九已至,卻和暖如春东揣,著一層夾襖步出監(jiān)牢的瞬間践惑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工嘶卧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尔觉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓芥吟,卻偏偏與公主長(zhǎng)得像侦铜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钟鸵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容