• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發(fā)教程 > 詳細頁面

        NET框架程序設計讀書筆記(3)--執(zhí)行程序集代碼

        NET框架程序設計讀書筆記(3)--執(zhí)行程序集代碼

        更新時間:2022-05-05 文章作者:未知 信息來源:網(wǎng)絡 閱讀次數(shù):

        1.4執(zhí)行程序集代碼

        托管模塊中包含著元數(shù)據(jù)和IL代碼。IL是由微軟在咨詢了一些商業(yè)和學術上的語言編譯器作者之后開發(fā)的一種獨立于CPU的機器語言。IL要比大多數(shù)CPU機器語言高級得多,它可以理解對象類型,并且擁有很多高級的指令,這些指令可以創(chuàng)建和初始化對象,調(diào)用對像上的虛方法以直接操作數(shù)組元素。它甚至還有拋出和捕獲異常的指令。我們可以把IL視 作一種面向?qū)ο竦臋C器語言。

        通常情況上,開發(fā)人員會使用一門高級語言,比如:C#或Visual Basic)。這些語言的編譯器産的將是IL代碼。當然,我們也可以直接以匯編語言的方法寫IL程序。微軟也提供了一個IL匯編器:ILAsm.exe,另外還有一個反匯編器:ILDdsm.exe 。

        C# 或者Visual Basic 等高級語言提供的都只是CLR全部功能的一個子集。 IL匯編語言允許開發(fā)人員獲取CLR所有的功能。

        總結IL的特點如下:

        1、面向?qū)ο裉匦裕c其他匯編不同。

        2、IL可以獲取CLR所有的功能

        3、IL并不束縛于任何特定的CPU平臺,也就是說他也可以夸平臺。



        .net程序執(zhí)行過程如下:

        1 一個方法執(zhí)行之前,CLR首先檢測Main中代碼引用的所有類型,CLR會分配一個內(nèi)部的數(shù)據(jù)結構,該數(shù)據(jù)結構用于管理對所引用類型的訪問。

        2、當該數(shù)據(jù)結構被初始化時,CLR將把每一個條目設置 為CLR內(nèi)部的一個沒有正式記錄的函數(shù),我們暫且稱該函數(shù)為 JITCompiler。

        3、當Main方法第一次調(diào)用引用的類型的方法成員時,JITCompiler函數(shù)將被調(diào)用,該函數(shù)負責將一個方法的IL代碼編譯成本地CPU指令。

        1、 JITCompiler將前面第2步的數(shù)據(jù)結構中的要調(diào)用的真實方法的地址替換成包含剛剛編譯好的CPU指令的內(nèi)存塊地址。

        2、 JITCompiler跳轉(zhuǎn)到該內(nèi)存塊中的代碼上,開始執(zhí)行。



        注意:一個類型的所有方法只會編譯一次,當這個類型的方法又被調(diào)用時,將會使用之前已經(jīng)編譯過的代碼,這樣只有在首次調(diào)用時,才會產(chǎn)生性能損失。

        也就是說托管代碼跟非托管代碼相比,性能上的損失是非常小的,近乎微不足道。



        托管代碼在性能上的優(yōu)點:



        1、 在新型的如奔4CPU上,JIT編譯器能產(chǎn)生利用新型CPU提供的特殊指令的本地代碼。而非托管應用程序通常被編譯為向具有最小通用功能集合的CPU平臺,一般會避免使用新型CPU提供的特殊指令。而這些特殊指令往往會在較新的Cpu上為應用程序帶來很高的性能提升中。

        2、 JIT編譯器能檢測到正在運行的機器上某些總是返回錯誤的布爾測試。例如:



        If(numberOfCPUs>1)

        {



        }



        如果宿主機器只有一個CPU,那么對于該段代碼,JIT編譯器將不會產(chǎn)生任何CPU指令。針對宿主機器的本地代碼鶁會得到更好的調(diào)整:代碼量將變得更小,執(zhí)行速度也會更快。



        當然,我們可以利用Ngen.exe工具,將IL代碼轉(zhuǎn)化為本地代碼,并生成一個文件,這樣執(zhí)行程序時,CLR將自動檢查是否有個預編譯的版本存在,如果存在,CLR將加載預編譯的代碼,不需要額外的運行時編譯。



        1.4.1 IL與代碼驗證



        1、 IL是一種基于堆棧的語言

        2、 IL沒有提供操作寄 存器的指令,開發(fā)人員可以很容易地產(chǎn)生IL代碼。

        3、 IL需要的指令也比較少。

        4、 IL指令是無類型的。

        5、 IL對CPU實現(xiàn)了抽象。



        IL的最大優(yōu)點是:提高了應用程序的健壯性,當IL代碼被編譯為本地Cpu指令時,CLR將執(zhí)行一個稱作驗證的過程。



        驗證過程檢查高級IL代碼,確保它做的每件事情都是“安全”的。以下是檢驗的一些條目:

        1、 不能從未初始化的內(nèi)存中讀取數(shù)據(jù)。

        2、 每個方法都必須傳入正確的參數(shù)個數(shù),且各個參數(shù)的類型要正確匹配。

        3、 每個方法的返回值都必須被正確地使用。

        4、 每個方法都必須有一個返回語句

        。。。。

        如果驗證不通過,將有一個System.Security.VerificationException異常被拋出,阻止方法繼續(xù)執(zhí)行。



        驗證的優(yōu)點:

        通過驗證的代碼,我們可以確保它們不會訪問它們不應該訪問的的內(nèi)存,因此也就不會干擾另一個應用程序的代碼。這意味著我們可以在一個單獨的windows虛擬地址空間內(nèi)運行多個托管

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 免免费国产AAAAA片| 久久免费精品视频| 嫩草视频在线免费观看| 亚洲性色成人av天堂| 国产成人精品免费视频大| 亚洲宅男永久在线| 9420免费高清在线视频| 亚洲自偷自拍另类图片二区| 鲁大师在线影院免费观看| 亚洲熟妇av一区| 一个人免费观看在线视频www| 久久久久精品国产亚洲AV无码| 成人激情免费视频| 无码 免费 国产在线观看91| 亚洲JLZZJLZZ少妇| 国产免费无遮挡精品视频| 黄色免费网址在线观看| 久久影院亚洲一区| 国产免费一区二区三区在线观看| 精品久久香蕉国产线看观看亚洲| 亚洲日韩久久综合中文字幕| 国产高清免费观看| 一级成人a做片免费| 久久久久亚洲AV无码永不| 老司机在线免费视频| 免费大片黄在线观看| 婷婷亚洲综合五月天小说| 国产一卡2卡3卡4卡2021免费观看| 亚洲AV成人精品日韩一区| 亚洲日韩国产精品乱| 99在线免费观看视频| 亚洲国产aⅴ成人精品无吗| 国产91精品一区二区麻豆亚洲| 亚洲精品免费观看| 亚洲中文字幕无码永久在线| 无码日韩精品一区二区免费暖暖| 亚洲成A人片在线播放器| 中文字幕专区在线亚洲| 国产在线观看麻豆91精品免费 | 国产免费播放一区二区| gogo全球高清大胆亚洲|