麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .NET > 正文

NET框架程序設(shè)計(jì)讀書筆記(三)--執(zhí)行程序集代碼

2024-07-21 02:17:13
字體:
供稿:網(wǎng)友
1.4執(zhí)行程序集代碼

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

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

c# 或者visual basic 等高級語言提供的都只是clr全部功能的一個子集。 il匯編語言允許開發(fā)人員獲取clr所有的功能。

總結(jié)il的特點(diǎn)如下:

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

2、il可以獲取clr所有的功能

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



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

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

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

3、當(dāng)main方法第一次調(diào)用引用的類型的方法成員時,jitcompiler函數(shù)將被調(diào)用,該函數(shù)負(fù)責(zé)將一個方法的il代碼編譯成本地cpu指令。

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

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



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

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



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



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

2、 jit編譯器能檢測到正在運(yùn)行的機(jī)器上某些總是返回錯誤的布爾測試。例如:



if(numberofcpus>1)

{



}



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



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



1.4.1 il與代碼驗(yàn)證



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

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

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

4、 il指令是無類型的。

5、 il對cpu實(shí)現(xiàn)了抽象。



il的最大優(yōu)點(diǎn)是:提高了應(yīng)用程序的健壯性,當(dāng)il代碼被編譯為本地cpu指令時,clr將執(zhí)行一個稱作驗(yàn)證的過程。



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

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

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

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

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

。。。。

如果驗(yàn)證不通過,將有一個system.security.verificationexception異常被拋出,阻止方法繼續(xù)執(zhí)行。



驗(yàn)證的優(yōu)點(diǎn):

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品视频yy9299一区 | 日韩99| www.17c亚洲蜜桃 | hd极品free性xxx护士人 | 国产精品一区二区视频 | av手机在线电影 | 一区二区精品视频 | 精品亚洲二区 | 国产成人在线网站 | 狠狠操夜夜爱 | 午夜精品小视频 | 久久96国产精品久久久 | 国产乱淫av | 天天操综 | 成人毛片100免费观看 | 精品一区二区三区四区在线 | 日本xxxx色视频在线观看免费, | 在线成人免费观看www | 99热久草 | 欧美视频一区二区 | 日本精品免费观看 | 蜜桃网站免费 | 91av大片 | 91国内精品久久久久免费影院 | 国产精品视频中文字幕 | 99精品热视频 | 国产又粗又爽又深的免费视频 | 黄色片网站在线播放 | 搜一级毛片 | 精品无吗乱吗av国产爱色 | 欧美一级三级在线观看 | 视频一区二区不卡 | 久草在线高清 | 成人国产在线看 | 国产精品1区2区在线观看 | 久久久成人精品视频 | 久久久久久久久久久久久久av | 国产精品二区高清在线 | 久久国产精品99国产 | 91久久国产综合精品女同国语 | 成人在线视频网 |