本書基于GCC Clang編譯器深入講解C 對(duì)象模型的相關(guān)知識(shí),涵蓋C 對(duì)象的內(nèi)部工作原理及底層的匯編實(shí)現(xiàn)機(jī)制。 本書先介紹對(duì)象模型的基本概念,并引入兩個(gè)用于研究C 代碼實(shí)現(xiàn)的開源工具一cppinsights和 Compiler Explorer。接著,依次講解C 數(shù)據(jù)語(yǔ)義學(xué),即編譯器如何布局C 對(duì)象模型中的數(shù)據(jù)成 C 函數(shù)語(yǔ)義學(xué),包括編譯器如何實(shí)現(xiàn)C 中的多態(tài)、如何調(diào)用虛函數(shù)等;C 構(gòu)造、析構(gòu)語(yǔ)義學(xué),涉及編譯器對(duì) C 對(duì)象的構(gòu)造和析構(gòu)方式,包括全局對(duì)象和靜態(tài)局部變量的構(gòu)造等內(nèi)容;C 異常處理,包括GCC中異常處理的實(shí)現(xiàn)方式及實(shí)踐準(zhǔn)則;C 運(yùn)行時(shí)類型識(shí)別(RTTI)的實(shí)現(xiàn)原理,包括 dynamic_cast算法的具體實(shí)現(xiàn);C Name Mangling規(guī)則,包括GCC對(duì)C 代碼中各個(gè)名稱的編碼方式。 本書適合有意深入理解C 對(duì)象模型、了解C 代碼底層實(shí)現(xiàn)的讀者閱讀。閱讀本書需要具備一定的C 基礎(chǔ)知識(shí)。
更實(shí)用基于產(chǎn)業(yè)界常用的C 17標(biāo)準(zhǔn)編寫。
更流行通過更流行的GCC Clang編譯器的實(shí)現(xiàn)來(lái)講解C 對(duì)象模型。
更透徹通過匯編代碼來(lái)講解C 代碼背后的實(shí)現(xiàn)原理。
更易懂通過97張圖片 31份配套案例代碼深入淺出講解知識(shí)難點(diǎn)。
更直觀引入開源工具cppinsights和Compiler Explorer用于研究GCC中C 對(duì)象模型的原理。
本書內(nèi)容包括:
1、C 數(shù)據(jù)語(yǔ)義學(xué),即編譯器如何布局C 對(duì)象模型中的數(shù)據(jù)成員;
2、C 函數(shù)語(yǔ)義學(xué),包括編譯器如何實(shí)現(xiàn)C 中的多態(tài)、如何調(diào)用虛函數(shù)等;
3、C 構(gòu)造、析構(gòu)語(yǔ)義學(xué),涉及編譯器對(duì)C 對(duì)象的構(gòu)造和析構(gòu)方式,包括全局對(duì)象和靜態(tài)局部變量的構(gòu)造等內(nèi)容;
4、C 異常處理,包括GCC中異常處理的實(shí)現(xiàn)方式及實(shí)踐準(zhǔn)則;
5、C 運(yùn)行時(shí)類型識(shí)別(RTTI)的實(shí)現(xiàn)原理,包括dynamic_cast算法的具體實(shí)現(xiàn);
6、C Name Mangling規(guī)則,包括GCC對(duì)C 代碼中各個(gè)名稱的編碼方式。
秦連松,碩士畢業(yè)于中國(guó)科學(xué)院大學(xué),曾在百度、字節(jié)跳動(dòng)等公司從事C 開發(fā)工作,目前在小米公司從事虛擬機(jī)相關(guān)的工作。
第 1 章 概述 1
第 2 章 工具 5
2.1 使用 cppinsights 5
2.2 使用 Compiler Explorer 12
2.3 總結(jié) 13
第 3 章 數(shù)據(jù)語(yǔ)義學(xué) 15
3.1 數(shù)據(jù)成員布局 17
3.2 繼承與數(shù)據(jù)成員 36
3.3 數(shù)據(jù)成員的存取 55
3.4 指向成員變量的指針 57
3.5 總結(jié) 62
第 4 章 函數(shù)語(yǔ)義學(xué) 63
4.1 C 函數(shù)決議 64
4.2 虛表構(gòu)造 69
4.3 成員函數(shù)的調(diào)用方式 79
4.4 虛成員函數(shù)的調(diào)用方式 89
4.5 指向成員函數(shù)的指針 99
4.6 總結(jié) 107
第 5 章 構(gòu)造、析構(gòu)語(yǔ)義學(xué) 109
5.1 對(duì)象構(gòu)造 110
5.2 對(duì)象析構(gòu) 131
5.3 全局對(duì)象構(gòu)造與析構(gòu) 145
5.4 總結(jié) 151
第 6 章 異常處理 155
6.1 C 異常的約定 157
6.2 GCC 中 C 異常的實(shí)現(xiàn) 169
6.3 現(xiàn)代 C 中的異常介紹 189
6.4 C 異常的處理 193
6.5 總結(jié) 196
第 7 章 運(yùn)行時(shí)類型識(shí)別 197
7.1 RTTI 布局 198
7.2 typeid 操作符 206
7.3 dynamic_cast 算法 211
7.4 總結(jié) 215
第 8 章 Name Mangling 規(guī)則 217
8.1 基本概念 218
8.2 操作符的編碼 222
8.3 一些特殊函數(shù)和實(shí)體的編碼 224
8.4 類型編碼 227
8.5 表達(dá)式編碼 234
8.6 作用域編碼 241
8.7 lambda 表達(dá)式編碼 243
8.8 壓縮 246
8.9 總結(jié) 251