Rust中的repr(C)

Rust編譯器不會保證類型的布局,但是提供了一個屬性用來對類型添加布局要求桂躏,如下所示:

#[repr(C)]
struct Foo {
    tiny: bool,
    normal: u32,
    small: u8,
    long: u64,
    short: u16,
}

#[repr(C)]提供了兼容C/C++編譯器的類型布局钻趋,當(dāng)你在使用FFI的時候會很有幫助,關(guān)于FFI我們后續(xù)再提剂习。#[repr(C)]會讓結(jié)構(gòu)的對齊順序和代碼的編寫順序一致蛮位。

下面是對上述struct的布局的詳細(xì)解釋:

field 占用字節(jié)數(shù) padding字節(jié)數(shù) 到目前為止占用的字節(jié)數(shù)
tiny 1 3 4
normal 4 0 8
small 1 7 16
long 8 0 24
short 2 6 32
  1. tiny 需要對其的原因是后面的normal占用4個字節(jié)较沪,為了對齊需要添加3個字節(jié)。
  2. small為了和后面的long對齊要添加8個字節(jié)才行失仁。
  3. 整個Foo結(jié)構(gòu)也需要對齊并且整個結(jié)構(gòu)中最大的對齊字段是long是8個字節(jié)尸曼,所以Foo最后要對short進(jìn)行8個字節(jié)的對齊。

其他布局

repr(Rust)

Rust中布局方式和編寫方式?jīng)]有多大的關(guān)系萄焦,在上述的例子中正好可以將其放在16個字節(jié)中控轿。

repr(packed)

這種布局方式不會添加padding,適用于內(nèi)存特別緊張的情況楷扬,但是一般不建議解幽,因?yàn)橛行〤PU可能并不支持這種沒有對齊的數(shù)據(jù)。

repr(align(n))

指定特定的對齊數(shù)烘苹,主要用指定比默認(rèn)的對齊要大的情況躲株。這樣做的一個好處是在一段連續(xù)的內(nèi)存(例如數(shù)組)中存儲的不同的值位于不同的緩存CPU行,能避免掉False Sharing的問題镣衡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末霜定,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子廊鸥,更是在濱河造成了極大的恐慌望浩,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惰说,死亡現(xiàn)場離奇詭異磨德,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)吆视,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門典挑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啦吧,你說我怎么就攤上這事您觉。” “怎么了授滓?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵琳水,是天一觀的道長。 經(jīng)常有香客問我般堆,道長在孝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任淮摔,我火速辦了婚禮浑玛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘噩咪。我一直安慰自己顾彰,他們只是感情好极阅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涨享,像睡著了一般筋搏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厕隧,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天奔脐,我揣著相機(jī)與錄音,去河邊找鬼吁讨。 笑死髓迎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的建丧。 我是一名探鬼主播排龄,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翎朱!你這毒婦竟也來了橄维?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤拴曲,失蹤者是張志新(化名)和其女友劉穎争舞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澈灼,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竞川,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叁熔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片委乌。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖者疤,靈堂內(nèi)的尸體忽然破棺而出福澡,到底是詐尸還是另有隱情叠赦,我是刑警寧澤驹马,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站除秀,受9級特大地震影響糯累,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜册踩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一泳姐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暂吉,春花似錦胖秒、人聲如沸缎患。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挤渔。三九已至,卻和暖如春风题,著一層夾襖步出監(jiān)牢的瞬間判导,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工沛硅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眼刃,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓摇肌,卻偏偏與公主長得像擂红,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子朦蕴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

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