C++對象模型

https://www.bilibili.com/video/BV1v64y1q7JT?p=1&spm_id_from=333.788.b_6d756c74695f70616765.1


P11-C++對象布局總覽30:53

對象模型

P9

空對象的 sizeof = 1

對齊

1、原因:

1)平臺原因(移植原因):不是所有的硬件平臺都能訪問任意地址上的任意數(shù)據(jù)的溅潜;某些硬件平臺只能在某些地址處取某些特定類型的數(shù)據(jù)术唬,否則拋出硬件異常。

2)性能原因:數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能地在自然邊界上對齊滚澜。原因在于粗仓,為了訪問未對齊的內(nèi)存,處理器需要作兩次內(nèi)存訪問设捐;而對齊的內(nèi)存訪問僅需要一次訪問借浊。

2、規(guī)則

1)數(shù)據(jù)成員對齊規(guī)則:結(jié)構(gòu)(struct)(或聯(lián)合(union))的數(shù)據(jù)成員萝招,第一個(gè)數(shù)據(jù)成員放在offset為0的地方蚂斤,以后每個(gè)數(shù)據(jù)成員的對齊按照#pragma pack指定的數(shù)值和這個(gè)數(shù)據(jù)成員自身長度中,比較小的那個(gè)進(jìn)行槐沼。

2)結(jié)構(gòu)(或聯(lián)合)的整體對齊規(guī)則:在數(shù)據(jù)成員完成各自對齊之后曙蒸,結(jié)構(gòu)(或聯(lián)合)本身也要進(jìn)行對齊,對齊將按照#pragma pack指定的數(shù)值和結(jié)構(gòu)(或聯(lián)合)最大數(shù)據(jù)成員長度中母赵,比較小的那個(gè)進(jìn)行逸爵。

3)結(jié)構(gòu)體作為成員:如果一個(gè)結(jié)構(gòu)里有某些結(jié)構(gòu)體成員,則結(jié)構(gòu)體成員要從其內(nèi)部最大元素大小的整數(shù)倍地址開始存儲凹嘲。

3师倔、定義結(jié)構(gòu)體對齊

可以通過預(yù)編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一系數(shù)周蹭,其中的n就是指定的“對齊系數(shù)”趋艘。

4、舉例

#pragma pack(2)

struct AA {

int a; ??????//長度4 > 2 按2對齊凶朗;偏移量為0瓷胧;存放位置區(qū)間[0,3]

char b; ?//長度1 < 2 按1對齊;偏移量為4棚愤;存放位置區(qū)間[4]

short c; ????//長度2 = 2 按2對齊搓萧;偏移量要提升到2的倍數(shù)6杂数;存放位置區(qū)間[6,7]

char d; ?//長度1 < 2 按1對齊;偏移量為7瘸洛;存放位置區(qū)間[8]揍移;共九個(gè)字節(jié)

};

#pragma pack()


P22-C++對象布局總覽(2)09:15

數(shù)據(jù)成員的聲明順序與內(nèi)存布局

P92


P33-C++對象布局總覽(3)18:21

單繼承的對象布局(非多態(tài))

P100
要保證derived class中base class subobject有其自己完整原樣性(就是說父類對象要正確padding)

多繼承和多重繼承的對象布局(非多態(tài))

P112

P44-C++對象布局總覽(4)17:33

單繼承的對象布局(多態(tài))

P152

P55-C++對象布局總覽(5)15:58


打印一個(gè)指向Pint3D對象的指針

type info在虛表指針-8的位置


兩個(gè)Point3D的析構(gòu)函數(shù),其實(shí)第二個(gè)是編譯器生成的反肋,但最后還是調(diào)用了 自定義的

打印一個(gè)指向Pint2D對象的指針


P66-構(gòu)造函數(shù)語義學(xué)(1)

26:12

P77-構(gòu)造函數(shù)語義學(xué)(2)

15:55

P88-構(gòu)造函數(shù)語義學(xué)(3)

19:12

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末那伐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子石蔗,更是在濱河造成了極大的恐慌罕邀,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件养距,死亡現(xiàn)場離奇詭異诉探,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)铃在,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門阵具,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人定铜,你說我怎么就攤上這事阳液。” “怎么了揣炕?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵帘皿,是天一觀的道長。 經(jīng)常有香客問我畸陡,道長鹰溜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任丁恭,我火速辦了婚禮曹动,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牲览。我一直安慰自己墓陈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布第献。 她就那樣靜靜地躺著贡必,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庸毫。 梳的紋絲不亂的頭發(fā)上仔拟,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音飒赃,去河邊找鬼利花。 笑死科侈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炒事。 我是一名探鬼主播兑徘,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼羡洛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起藕漱,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤欲侮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后肋联,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體威蕉,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年橄仍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了韧涨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侮繁,死狀恐怖虑粥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宪哩,我是刑警寧澤娩贷,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站锁孟,受9級特大地震影響彬祖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜品抽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一储笑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧圆恤,春花似錦突倍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至弱左,卻和暖如春窄陡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拆火。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工跳夭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涂圆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓币叹,卻偏偏與公主長得像润歉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子颈抚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

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

  • 一個(gè)博客踩衩,這個(gè)博客記錄了他讀這本書的筆記,總結(jié)得不錯(cuò)贩汉∏唬《深度探索C++對象模型》筆記匯總 1. C++對象模型與內(nèi)...
    Mr希靈閱讀 5,593評論 0 13
  • 在學(xué)習(xí)完類對象的構(gòu)造后,下面就需要學(xué)習(xí)類數(shù)據(jù)成員和函數(shù)成員的存取匹舞。 編譯器對于類對象的處理方式:(1)對于空類褐鸥,編...
    babybus_hentai閱讀 348評論 0 0
  • 1. C++對象模型 所有的非靜態(tài)數(shù)據(jù)成員存儲在對象本身中。所有的靜態(tài)數(shù)據(jù)成員赐稽、成員函數(shù)(包括靜態(tài)與非靜態(tài))都置于...
    陳星空閱讀 1,472評論 0 2
  • 前言: c++ language博大精深叫榕,需要我們透過現(xiàn)象看清本質(zhì)才是正道。不積硅步姊舵,無以至千里晰绎;不積小流,無以成...
    竹林柳岸閱讀 320評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月蠢莺,有人笑有人哭寒匙,有人歡樂有人憂愁,有人驚喜有人失落躏将,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,543評論 28 53