golang 和 C++ 的內(nèi)存對(duì)齊

golang 和 C++的內(nèi)存對(duì)齊鳍寂,基本一致拟烫,記住規(guī)則和對(duì)應(yīng)類型的 size 即可

內(nèi)存對(duì)齊規(guī)則

  1. 有效對(duì)齊值是固定值和結(jié)構(gòu)體中最長(zhǎng)數(shù)據(jù)類型長(zhǎng)度中較小的那個(gè)列敲。固定值系統(tǒng)默認(rèn)為 32 位是 4, 64 位是 8荚孵,#pragma pack(n)設(shè)置了則是對(duì)應(yīng)的 n掷倔。
  2. 結(jié)構(gòu)體第一個(gè)成員的 offset 為 0较剃,以后每個(gè)成員相對(duì)于結(jié)構(gòu)體首地址的 offset 都是 min{該成員大小, 有效對(duì)齊值}的整數(shù)倍咕别,如有需要編譯器會(huì)在成員之間加上填充字節(jié)。
  3. 結(jié)構(gòu)體的總大小為 有效對(duì)齊值 的整數(shù)倍写穴,如有需要編譯器會(huì)在最末一個(gè)成員之后加上填充字節(jié)惰拱。

C++內(nèi)存對(duì)齊

常見(jiàn)類型占用內(nèi)存大小

類型/編譯器 16 位編譯器 32 位編譯器 64 位編譯器
bool 1 1 1
char 1 1 1
char* 2 4 8
int 2 4 4
float 4 4 4
double 8 8 8
long long 8 8 8

例子

#include <iostream>
#include <stdint.h>
using namespace std;
// #pragma pack(4)
class Part1 {
    bool a;
    int32_t b;
    int8_t c;
    int64_t d;
    char e;
};

class Part2 {
    char e;
    int8_t c;
    bool a;
    int32_t b;
    int64_t d;
};

int main(void){
    Part1 part1;
    Part2 part2;

    printf("part1 size: %zu\n", sizeof(part1));
    printf("part2 size: %zu\n", sizeof(part2));
}
// output:
// part1 size: 32,   if pack(4): part1 size: 24
// part2 size: 16

golang 內(nèi)存對(duì)齊

常見(jiàn)類型占用內(nèi)存大小

類型/編譯器 64 位編譯器
bool 1
byte 1
uintptr 8
int 8
float64 8
string 16

例子

package main
import (
    "fmt"
    "unsafe"
)

type Part1 struct {
    a bool
    b int32
    c int8
    d int64
    e byte
}

type Part2 struct {
    e byte
    c int8
    a bool
    b int32
    d int64
}

func main() {
    part1 := Part1{}
    part2 := Part2{}

    fmt.Printf("part1 size: %d, align: %d\n", unsafe.Sizeof(part1), unsafe.Alignof(part1))
    fmt.Printf("part2 size: %d, align: %d\n", unsafe.Sizeof(part2), unsafe.Alignof(part2))
}
// part1 size: 32, align: 8
// part2 size: 16, align: 8

例子分析

僅討對(duì)齊固定值為 8 時(shí) Part1 的情況,例子中的 a,b,c,d,e 占用大小分別為 1,4,1,8,1啊送。填充字節(jié)用 0 表示偿短,|之間表示 8 字節(jié)空間:

  1. a 偏移為 0,|a...
  2. b 偏移為 4 的整數(shù)倍馋没,|a000b|...
  3. c 偏移為 1 的整數(shù)倍昔逗,|a000b|c...
  4. d 偏移為 8 的整數(shù)倍,|a000b|c0000000|d|...
  5. e 偏移為 1 的整數(shù)倍篷朵,|a000b|c0000000|d|e...
  6. 整個(gè)結(jié)構(gòu)體對(duì)齊勾怒,補(bǔ)齊為 8 的整數(shù)倍婆排,|a000b|c0000000|d|e0000000|
  7. 得出總大小為 32
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市笔链,隨后出現(xiàn)的幾起案子段只,更是在濱河造成了極大的恐慌,老刑警劉巖鉴扫,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赞枕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坪创,警方通過(guò)查閱死者的電腦和手機(jī)鹦赎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)误堡,“玉大人,你說(shuō)我怎么就攤上這事雏吭∷” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵杖们,是天一觀的道長(zhǎng)悉抵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)摘完,這世上最難降的妖魔是什么姥饰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮孝治,結(jié)果婚禮上列粪,老公的妹妹穿的比我還像新娘。我一直安慰自己谈飒,他們只是感情好岂座,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著杭措,像睡著了一般费什。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上手素,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天鸳址,我揣著相機(jī)與錄音,去河邊找鬼泉懦。 笑死稿黍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的祠斧。 我是一名探鬼主播闻察,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了辕漂?” 一聲冷哼從身側(cè)響起呢灶,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钉嘹,沒(méi)想到半個(gè)月后鸯乃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跋涣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年缨睡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陈辱。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奖年,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沛贪,到底是詐尸還是另有隱情陋守,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布利赋,位于F島的核電站水评,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏媚送。R本人自食惡果不足惜中燥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望塘偎。 院中可真熱鬧疗涉,春花似錦、人聲如沸式塌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)峰尝。三九已至偏窝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間武学,已是汗流浹背祭往。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留火窒,地道東北人硼补。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像熏矿,于是被迫代替她去往敵國(guó)和親已骇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子离钝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345