關(guān)于我們
書單推薦
新書推薦
|
.NET Core 底層入門 本書講解了 .NET Core公共語言運(yùn)行時(shí)的底層實(shí)現(xiàn),從介紹MSIL和x86匯編語言開始,到講解異常、多線程、GC以及JIT編譯器的實(shí)現(xiàn)原理與實(shí)現(xiàn)細(xì)節(jié)。本書包含了大量圖表讓讀者可以更容易了解其中的內(nèi)容,同時(shí)涉及到 .NET Core底層實(shí)現(xiàn)的部分還給出了對(duì)應(yīng)的源代碼鏈接,讓讀者可以參考源代碼有更深入的理解。此外,本書還有相關(guān)提問用的倉庫和QQ 群便于讀者交流,詳見序言。 本書主要面向有一年以上 .NET (C#)開發(fā)經(jīng)驗(yàn)的開發(fā)者,其他程序語言的開發(fā)者也可以閱讀本書來比較 .NET Core與其他語言的運(yùn)行時(shí)之間有哪些共同點(diǎn)和不同點(diǎn),本書的知識(shí)可以為讀者在編寫高性能應(yīng)用或底層應(yīng)用時(shí)提供有力的支持。 作者提供大量源碼鏈接以及解釋數(shù)據(jù)結(jié)構(gòu)和處理流程的圖標(biāo)。 首先非常感謝您在百忙之中翻開本書。本書主要介紹 .NET Core公共語言運(yùn)行時(shí)的底層實(shí)現(xiàn),包括異常、多線程、GC(Garbage Collection)以及JIT編譯器(Justintime Compiler)的實(shí)現(xiàn)原理與細(xì)節(jié)。閱讀本書可以加深對(duì) .NET框架的理解,這些知識(shí)會(huì)在編寫框架以及高性能程序時(shí)發(fā)揮重要的作用。如果您有興趣,本書中的知識(shí)還可以幫您向CoreCLR添加或修改功能并貢獻(xiàn)代碼,或者實(shí)現(xiàn)一個(gè)自己的語言框架。 我在2017年的年初開始閱讀 .NET Core源代碼,在此之前我只是一個(gè)擁有一些 C++ 與匯編知識(shí)的開發(fā)者,直到某一天一個(gè) QQ 群的群友推薦我去閱讀 .NET Core 的源代碼,從此之后的一年時(shí)間里,我把大量的時(shí)間花在了閱讀源代碼上,收獲很多,包括理解了各種各樣曾經(jīng)以為是黑箱子的機(jī)制,以及編寫代碼時(shí)會(huì)更多地去思考執(zhí)行代碼時(shí)底層發(fā)生的處理。再之后,我在博客上發(fā)表了一些介紹 .NET Core底層實(shí)現(xiàn)的文章,雖然理解這些文章需要的知識(shí)很多,但還是收到了一些反響,并且得到了北京航空航天大學(xué)出版社的邀請(qǐng)。在此我非常感謝推薦我閱讀 .NET Core源代碼的群友以及邀請(qǐng)我編寫此書的北京航空航天大學(xué)出版社編輯。 本書內(nèi)容很大程度上依賴于對(duì) .NET Core的源代碼分析,與《CLR via C#》不一樣的是,本書并沒有全面地去介紹公共語言運(yùn)行時(shí)的各個(gè)組成部分,而是選擇了幾個(gè)重要的主題,包括異常、多線程、GC以及JIT,并詳細(xì)介紹它們的實(shí)現(xiàn)原理與實(shí)現(xiàn)細(xì)節(jié),且會(huì)給出相關(guān)的匯編代碼以及數(shù)據(jù)結(jié)構(gòu),我相信深入的學(xué)習(xí)比淺顯的帶過更有意義。作為基礎(chǔ)內(nèi)容,本書還會(huì)介紹MSIL與x86匯編,其中MSIL部分由微軟的MVP劉浩楊編寫,劉浩楊是 .NET的AOP框架AspectCore的作者以及APM框架SkyWalking的 .NET探針的主要開發(fā)者,對(duì) .NET框架以及MSIL有著非常深入的理解。 雖然本書與 .NET Core源代碼的關(guān)聯(lián)比較大,部分章節(jié)也會(huì)給出相關(guān)的源代碼鏈接,但理解本書的內(nèi)容不需要閱讀源代碼,本書包含了大量的圖表用于解釋數(shù)據(jù)結(jié)構(gòu)與處理流程,如果您是一個(gè)擁有一年以上經(jīng)驗(yàn)的 .NET開發(fā)者,并且對(duì) .NET運(yùn)行時(shí)的底層實(shí)現(xiàn)有興趣,那么應(yīng)該可以順利地閱讀本書并理解大部分內(nèi)容。部分相對(duì)難以理解的內(nèi)容以及源代碼鏈接會(huì)放在每節(jié)的最后(即“CoreCLR中的相關(guān)代碼”小節(jié)),您可以跳過這部分的內(nèi)容,對(duì)閱讀接下來的章節(jié)不會(huì)有影響。如果您在閱讀過程中有疑問,可以瀏覽網(wǎng)站,在上面找到提問用的倉庫并建立issue提問,也可以加入網(wǎng)站上列出的QQ群討論。不管您是出于興趣還是工作需要閱讀本書,都希望您可以從中得到收獲。 老農(nóng),開源MVC框架ZKWeb的作者,對(duì)C++和x86匯編有多年研究,熟悉逆向分析和性能優(yōu)化。 劉浩楊,高級(jí)軟件工程師,關(guān)注應(yīng)用性能管理(APM)和高級(jí)語言虛擬機(jī)實(shí)現(xiàn),熟悉Web應(yīng)用性能優(yōu)化,對(duì)MSIL和CLR有深入了解。開源愛好者,開源AOP框架AspectCore作者,Apache SkyWalking APM的.NET Core探針作者。 第1章公共語言運(yùn)行時(shí)概述1 1.1.1.NET框架簡介1 1.1.2公共語言運(yùn)行時(shí)中的各個(gè)組成部分3 1.1.3名稱規(guī)范5 第2章MSIL入門7 第1節(jié)逆向 .NET程序到IL7 2.1.1ildasm7 2.1.2使用ILSpy10 2.1.3dnSpy10 第2節(jié)基礎(chǔ)語法11 2.2.1IL語法格式11 2.2.2IL指令格式17 2.2.3評(píng)價(jià)堆棧18 2.2.4常用指令19 2.2.5常見的C#代碼與IL代碼的對(duì)比21 第3節(jié)流程控制26 2.3.1IL流程控制26 2.3.2常見的流程控制C#代碼與IL代碼對(duì)比28 第3章x86匯編入門37 第1節(jié)匯編與機(jī)器碼37 3.1.1理解匯編語言與機(jī)器碼37 3.1.2RISC與CISC42 3.1.3流水線42 第2節(jié)內(nèi)存44 3.2.1位與字節(jié)44 3.2.2負(fù)數(shù)的表現(xiàn)46 3.2.3小端與大端47 3.2.4內(nèi)存地址47 3.2.5虛擬內(nèi)存48 3.2.6了解虛擬內(nèi)存的實(shí)現(xiàn)50 第3節(jié)寄存器50 3.3.1通用寄存器50 3.3.2程序計(jì)數(shù)器52 3.3.3標(biāo)志寄存器52 第4節(jié)基礎(chǔ)指令55 3.4.1匯編指令記法55 3.4.2匯編指令格式56 3.4.3匯編指令簡寫57 3.4.4基礎(chǔ)匯編指令58 3.4.5更多指令68 3.4.6機(jī)器碼的編碼方式68 第5節(jié)流程控制69 3.5.1流程控制實(shí)現(xiàn)69 3.5.2比較指令70 3.5.3跳轉(zhuǎn)指令73 3.5.4其他流程控制77 3.5.5分支預(yù)測79 第6節(jié)函數(shù)調(diào)用82 3.6.1棧結(jié)構(gòu)82 3.6.2函數(shù)調(diào)用85 3.6.3enter與leave指令89 3.6.4調(diào)用規(guī)范89 第7節(jié)系統(tǒng)調(diào)用91 3.7.1系統(tǒng)調(diào)用簡介91 3.7.2在x86上發(fā)起系統(tǒng)調(diào)用(軟中斷)92 3.7.3在x86上發(fā)起系統(tǒng)調(diào)用(sysenter)93 3.7.4在x8664上發(fā)起系統(tǒng)調(diào)用(syscall)94 第8節(jié)內(nèi)存屏障95 3.8.1亂序執(zhí)行95 3.8.2內(nèi)存屏障簡介96 3.8.3雙檢鎖97 第4章編譯與調(diào)試CoreCLR100 第1節(jié)在Windows上編譯CoreCLR100 4.1.1準(zhǔn)備編譯環(huán)境100 4.1.2下載CoreCLR源代碼101 4.1.3編譯CoreCLR102 4.1.4使用編譯出來的CoreCLR103 4.1.5最新的編譯文檔103 第2節(jié)在Windows上調(diào)試CoreCLR104 4.2.1使用Visual Studio調(diào)試CoreCLR104 4.2.2使用WinDbg調(diào)試CoreCLR105 4.2.3在WinDbg中使用SOS擴(kuò)展109 4.2.4更方便地調(diào)試托管方法對(duì)應(yīng)的匯編代碼113 第3節(jié)在Linux上編譯CoreCLR113 第4節(jié)在Linux上調(diào)試CoreCLR116 4.4.1使用LLDB調(diào)試CoreCLR116 4.4.2在LLDB中使用SOS擴(kuò)展119 第5章異常處理實(shí)現(xiàn)126 第1節(jié)異常處理簡介126 5.1.1通過返回值報(bào)告錯(cuò)誤與通過異常報(bào)告錯(cuò)誤的區(qū)別126 5.1.2.NET中的異常處理129 第2節(jié)用戶異常的觸發(fā)132 5.2.1用戶異常132 5.2.2通過throw關(guān)鍵詞拋出異常133 5.2.3調(diào)用 .NET運(yùn)行時(shí)內(nèi)部函數(shù)拋出異常135 5.2.4JIT編譯時(shí)自動(dòng)插入拋出異常的代碼135 5.2.5CoreCLR中的相關(guān)代碼137 第3節(jié)硬件異常的觸發(fā)137 5.3.1硬件異常137 5.3.2訪問null對(duì)象的字段時(shí)拋出異常138 5.3.3調(diào)用null對(duì)象的方法時(shí)拋出異常142 5.3.4對(duì)整數(shù)進(jìn)行零除時(shí)的處理144 5.3.5CoreCLR中的相關(guān)代碼146 第4節(jié)異常處理實(shí)現(xiàn)146 5.4.1異常處理的過程146 5.4.2捕捉異常并獲取拋出異常的位置147 5.4.3通過調(diào)用鏈跟蹤獲取拋出異常的函數(shù)與所有調(diào)用來源148 5.4.4獲取函數(shù)元數(shù)據(jù)中的異常處理表150 5.4.5枚舉異常處理表調(diào)用對(duì)應(yīng)的finally塊與catch塊151 5.4.6重新拋出異常的處理151 5.4.7CoreCLR中的相關(guān)代碼153 第5節(jié)異常處理對(duì)性能的影響154 第6章多線程實(shí)現(xiàn)158 第1節(jié)原生線程158 6.1.1原生線程簡介158 6.1.2上下文切換159 6.1.3線程調(diào)度161 6.1.4?臻g161 第2節(jié)托管線程162 6.2.1托管線程簡介162 6.2.2托管線程對(duì)象163 6.2.3創(chuàng)建托管線程的例子163 6.2.4前臺(tái)線程與后臺(tái)線程164 6.2.5CoreCLR中的相關(guān)代碼166 第3節(jié)搶占模式與合作模式166 6.3.1切換模式的實(shí)現(xiàn)167 6.3.2CoreCLR中的相關(guān)代碼169 第4節(jié)線程本地儲(chǔ)存169 6.4.1ThreadStatic Attribute屬性的實(shí)現(xiàn)171 6.4.2ThreadLocal類的實(shí)現(xiàn)172 6.4.3CoreCLR中的相關(guān)代碼175 第5節(jié)原子操作175 6.5.1原子操作簡介175 6.5.2.NET中的原子操作179 6.5.3無鎖算法182 6.5.4CoreCLR中的相關(guān)代碼183 第6節(jié)自旋鎖184 6.6.1線程鎖184 6.6.2使用Thread.SpinWait實(shí)現(xiàn)自旋鎖185 6.6.3使用System.Threading.SpinWait代替187 6.6.4使用System.Threading.SpinLock實(shí)現(xiàn)自旋鎖188 6.6.5Thread.Sleep(0)與Thread.Yield的區(qū)別189 6.6.6使用pause指令的另一個(gè)原因190 6.6.7CoreCLR中的相關(guān)代碼190 第7節(jié)互斥鎖191 第8節(jié)混合鎖與lock語句197 6.8.1線程中止安全200 6.8.2CoreCLR中的相關(guān)代碼201 第9節(jié)信號(hào)量204 6.9.1輕量信號(hào)量206 6.9.2通過信號(hào)量實(shí)現(xiàn)生產(chǎn)者—消費(fèi)者模式206 6.9.3通過Monitor類實(shí)現(xiàn)生產(chǎn)者—消費(fèi)者模式208 6.9.4CoreCLR中的相關(guān)代碼210 第10節(jié)讀寫鎖213 第11節(jié)異步操作216 6.11.1阻塞操作216 6.11.2事件循環(huán)機(jī)制217 6.11.3異步編程模型219 6.11.4異步編程模型的實(shí)現(xiàn)原理221 6.11.5任務(wù)并行庫224 6.11.6任務(wù)并行庫的實(shí)現(xiàn)原理226 6.11.7ValueTask229 6.11.8async與await關(guān)鍵字的例子230 6.11.9async與await關(guān)鍵字的實(shí)現(xiàn)原理231 6.11.10堆積的協(xié)程與無堆的協(xié)程239 6.11.11CoreCLR中的相關(guān)代碼239 第12節(jié)執(zhí)行上下文242 6.12.1異步本地變量與執(zhí)行上下文242 6.12.2CoreCLR中的相關(guān)代碼247 第13節(jié)同步上下文248 6.13.1同步上下文的使用例子(基于WinForm)249 6.13.2自定義同步上下文實(shí)現(xiàn)252 6.13.3CoreCLR中的相關(guān)代碼258 第7章GC垃圾回收實(shí)現(xiàn)260 第1節(jié)GC簡介260 7.1.1棧空間與堆空間260 7.1.2值類型與引用類型261 7.1.3.NET中的GC263 7.1.4垃圾回收VS引用計(jì)數(shù)271 第2節(jié)對(duì)象內(nèi)存結(jié)構(gòu)271 7.2.1值類型對(duì)象的內(nèi)存結(jié)構(gòu)271 7.2.2引用類型對(duì)象的內(nèi)存結(jié)構(gòu)273 7.2.3存活標(biāo)記與固定標(biāo)記276 7.2.4裝箱與拆箱277 7.2.5CoreCLR中的相關(guān)代碼278 第3節(jié)托管堆結(jié)構(gòu)280 7.3.1.NET程序的內(nèi)存結(jié)構(gòu)280 7.3.2托管堆與堆段282 7.3.3分配上下文284 7.3.4分代的實(shí)現(xiàn)286 7.3.5自由對(duì)象列表287 7.3.6跨代引用記錄289 7.3.7析構(gòu)對(duì)象列表與析構(gòu)隊(duì)列291 7.3.8CoreCLR中的相關(guān)代碼291 第4節(jié)分配對(duì)象流程293 7.4.1new關(guān)鍵字生成的代碼293 7.4.2從托管堆分配空間的內(nèi)部函數(shù)297 7.4.3分配小對(duì)象的流程299 7.4.4分配大對(duì)象的流程299 7.4.5記錄包含析構(gòu)函數(shù)的對(duì)象到析構(gòu)對(duì)象列表302 7.4.6CoreCLR中的相關(guān)代碼302 第5節(jié)垃圾回收流程303 7.5.1GC的觸發(fā)303 7.5.2執(zhí)行GC的線程306 7.5.3GC的總體流程307 7.5.4重新決定目標(biāo)代309 7.5.5判斷是否應(yīng)該執(zhí)行后臺(tái)GC311 7.5.6CoreCLR中的相關(guān)代碼312 第6節(jié)標(biāo)記階段314 7.6.1獲取根對(duì)象314 7.6.2遞歸掃描根對(duì)象并設(shè)置存活標(biāo)記315 7.6.3通過卡片表掃描跨代引用并設(shè)置存活標(biāo)記318 7.6.4枚舉強(qiáng)引用GC句柄并設(shè)置存活標(biāo)記318 7.6.5枚舉固定GC句柄并設(shè)置固定標(biāo)記319 7.6.6枚舉弱引用GC句柄并清空不再存活對(duì)象引用319 7.6.7掃描析構(gòu)對(duì)象列表并添加不再存活對(duì)象到析構(gòu)隊(duì)列319 7.6.8枚舉跟蹤復(fù)活弱引用GC句柄并清空不再存活對(duì)象引用320 7.6.9決定是否啟用升代320 7.6.10CoreCLR中的相關(guān)代碼321 第7節(jié)計(jì)劃階段323 7.7.1構(gòu)建Plug樹323 7.7.2構(gòu)建Brick表324 7.7.3模擬壓縮325 7.7.4判斷是否執(zhí)行壓縮與新建短暫堆段327 7.7.5CoreCLR中的相關(guān)代碼328 第8節(jié)重定位階段328 7.8.1修改對(duì)象引用地址328 7.8.2CoreCLR中的相關(guān)代碼330 第9節(jié)壓縮階段330 7.9.1復(fù)制對(duì)象值330 7.9.2結(jié)束GC332 7.9.3CoreCLR中的相關(guān)代碼333 第10節(jié)清掃階段333 7.10.1創(chuàng)建自由對(duì)象并加到自由列表333 7.10.2結(jié)束GC334 7.10.3CoreCLR中的相關(guān)代碼334 第11節(jié)后臺(tái)GC335 7.11.1后臺(tái)標(biāo)記階段335 7.11.2后臺(tái)清掃階段336 7.11.3CoreCLR中的相關(guān)代碼337 第12節(jié)調(diào)整GC行為338 7.12.1設(shè)置GC模式338 7.12.2設(shè)置延遲模式339 7.12.3設(shè)置延遲等級(jí)340 7.12.4開啟無GC區(qū)域341 7.12.5開啟大對(duì)象堆壓縮342 7.12.6保留堆段空間地址342 7.12.7更多選項(xiàng)(針對(duì) .NET Core)343 第13節(jié)獲取GC信息344 7.13.1獲取GC執(zhí)行次數(shù)344 7.13.2注冊(cè)完整GC觸發(fā)前的通知345 7.13.3在Windows系統(tǒng)上使用ETW捕捉GC事件347 7.13.4在Linux系統(tǒng)上使用Lttng捕捉GC事件350 7.13.5使用EventListener捕捉GC事件351 第8章JIT編譯器實(shí)現(xiàn)354 第1節(jié)JIT簡介354 8.1.1JIT編譯器354 8.1.2.NET中的RyuJIT編譯器356 8.1.3在Visual Studio中查看生成的匯編代碼356 8.1.4使用JITDump日志查看JIT編譯流程與生成的匯編代碼357 第2節(jié)JIT編譯流程358 8.2.1JIT的觸發(fā)358 8.2.2分層編譯360 8.2.3JIT編譯流程362 8.2.4CoreCLR中的相關(guān)代碼363 第3節(jié)IR結(jié)構(gòu)366 8.3.1HIR與LIR366 8.3.2HIR的結(jié)構(gòu)367 8.3.3HIR的例子367 8.3.4LIR的結(jié)構(gòu)372 8.3.5LIR的例子372 8.3.6常見的HIR結(jié)構(gòu)376 8.3.7CoreCLR中的相關(guān)代碼382 第4節(jié)IL解析383 8.4.1創(chuàng)建本地變量表383 8.4.2創(chuàng)建基礎(chǔ)塊列表383 8.4.3創(chuàng)建異常處理表384 8.4.4構(gòu)造語法樹385 8.4.5CoreCLR中的相關(guān)代碼386 第5節(jié)函數(shù)內(nèi)聯(lián)387 8.5.1內(nèi)聯(lián)的條件388 8.5.2內(nèi)聯(lián)的處理389 8.5.3CoreCLR中的相關(guān)代碼390 第6節(jié)IR變形390 8.6.1添加內(nèi)部代碼390 8.6.2提升構(gòu)造體391 8.6.3標(biāo)記暴露地址的本地變量393 8.6.4對(duì)基礎(chǔ)塊中的各個(gè)節(jié)點(diǎn)進(jìn)行變形操作393 8.6.5消除三元條件運(yùn)算節(jié)點(diǎn)396 8.6.6CoreCLR中的相關(guān)代碼398 第7節(jié)流程分析399 8.7.1計(jì)算前任基礎(chǔ)塊與后任基礎(chǔ)塊399 8.7.2計(jì)算邊緣權(quán)重(Edge Weight)400 8.7.3調(diào)整基礎(chǔ)塊順序400 8.7.4計(jì)算可到達(dá)的基礎(chǔ)塊400 8.7.5計(jì)算支配與支配邊界401 8.7.6插入GC檢測點(diǎn)402 8.7.7添加小函數(shù)402 8.7.8CoreCLR中的相關(guān)代碼403 第8節(jié)本地變量排序404 8.8.1根據(jù)引用計(jì)數(shù)排序本地變量404 8.8.2CoreCLR中的相關(guān)代碼404 第9節(jié)評(píng)價(jià)順序定義405 8.9.1決定語法樹節(jié)點(diǎn)的評(píng)價(jià)順序405 8.9.2CoreCLR中的相關(guān)代碼405 第10節(jié)變量版本標(biāo)記406 8.10.1SSA406 8.10.2構(gòu)建SSA407 8.10.3構(gòu)建VN410 8.10.4CSSA與TSSA411 8.10.5CoreCLR中的相關(guān)代碼411 第11節(jié)循環(huán)優(yōu)化413 8.11.1循環(huán)的結(jié)構(gòu)413 8.11.2循環(huán)反轉(zhuǎn)415 8.11.3循環(huán)克隆416 8.11.4循環(huán)展開417 8.11.5循環(huán)不變代碼外提418 8.11.6CoreCLR中的相關(guān)代碼419 第12節(jié)賦值傳播420 8.12.1替換擁有相同值的變量420 8.12.2CoreCLR中的相關(guān)代碼421 第13節(jié)公共子表達(dá)式消除421 8.13.1合并擁有相同值的表達(dá)式421 8.13.2CoreCLR中的相關(guān)代碼422 第14節(jié)斷言傳播424 8.14.1生成并傳播斷言424 8.14.2CoreCLR中的相關(guān)代碼425 第15節(jié)邊界檢查消除426 8.15.1根據(jù)斷言消除邊界檢查426 8.15.2CoreCLR中的相關(guān)代碼427 第16節(jié)合理化427 8.16.1轉(zhuǎn)換HIR結(jié)構(gòu)到LIR結(jié)構(gòu)427 8.16.2轉(zhuǎn)換LCL_VAR節(jié)點(diǎn)428 8.16.3轉(zhuǎn)換ADDR與IND節(jié)點(diǎn)428 8.16.4刪除COMMA節(jié)點(diǎn)430 8.16.5CoreCLR中的相關(guān)代碼430 第17節(jié)低級(jí)化431 8.17.1分割針對(duì)long類型的操作431 8.17.2轉(zhuǎn)換算術(shù)運(yùn)算到地址模式431 8.17.3轉(zhuǎn)換除法運(yùn)算和求余運(yùn)算431 8.17.4轉(zhuǎn)換SWITCH節(jié)點(diǎn)433 8.17.5針對(duì)函數(shù)調(diào)用添加PUTARG_REG與PUTARG_STK節(jié)點(diǎn)435 8.17.6轉(zhuǎn)換CALL節(jié)點(diǎn)436 8.17.7標(biāo)記節(jié)點(diǎn)是否為被包含節(jié)點(diǎn)440 8.17.8標(biāo)記節(jié)點(diǎn)被使用時(shí)是否需要先加載到CPU寄存器440 8.17.9CoreCLR中的相關(guān)代碼441 第18節(jié)線性掃描寄存器分配442 8.18.1寄存器分配442 8.18.2線性掃描寄存器分配簡介442 8.18.3CoreCLR中的相關(guān)代碼450 第19節(jié)匯編指令生成451 8.19.1計(jì)算幀布局451 8.19.2生成匯編指令453 8.19.3包含異常處理小函數(shù)的匯編代碼456 8.19.4CoreCLR中的相關(guān)代碼459 第20節(jié)機(jī)器代碼生成460 8.20.1生成機(jī)器碼與元數(shù)據(jù)460 8.20.2CoreCLR中的相關(guān)代碼463 第21節(jié)函數(shù)頭信息464 8.21.1除錯(cuò)信息的結(jié)構(gòu)465 8.21.2異常處理表的結(jié)構(gòu)466 8.21.3GC信息的結(jié)構(gòu)466 8.21.4函數(shù)對(duì)象的結(jié)構(gòu)467 8.21.5;貪L信息的結(jié)構(gòu)467 第22節(jié)AOT編譯468 8.22.1使用.NET Framework的NGen工具執(zhí)行AOT編譯469 8.22.2使用.NET Core的CrossGen工具執(zhí)行AOT編譯469 附錄A中英文專業(yè)名詞對(duì)照表472 附錄B常用IL指令一覽480 附錄C常用匯編指令一覽485 附錄DSOS擴(kuò)展命令一覽489 附錄EIR語法樹節(jié)點(diǎn)類型一覽517 參考文獻(xiàn)523
你還可能感興趣
我要評(píng)論
|