久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

CLR和JIT

 昵稱36388461 2017-11-25

  在使用IDE進(jìn)行編譯的時(shí)候,,這個(gè)過程具體的叫法是,使用編譯器面向CLR來生成代碼,。對(duì)于不同的開發(fā)語言,,使用的的編譯器也不一樣,但是生成的代碼都一樣,。

  “無論選用哪一個(gè)編譯器,,結(jié)果都是一個(gè)托管模塊?!?/em>

 

  托管模塊中的中間語言(MSIL),,是編譯器編譯代碼時(shí)生成的代碼,它是與CPU無關(guān)的機(jī)器語言,。當(dāng)程序運(yùn)行時(shí),,由CLR將中間代碼轉(zhuǎn)換為本地CPU指令。因此,,任何編譯成MSIL的程序都可以在實(shí)現(xiàn)CLR的環(huán)境上執(zhí)行,。這是.NET Framework具有可移植性的部分原因。

  為了執(zhí)行一個(gè)IL方法,,首先必須把它轉(zhuǎn)換成本地CPU指令,。該處理過程如下:當(dāng).NET程序執(zhí)行時(shí),CLR激活JIT編譯器,,JIT編譯器根據(jù)程序中各個(gè)部分的需要將MSIL轉(zhuǎn)換成本機(jī)代碼,。

  下圖展示了一個(gè)方法首次調(diào)用時(shí)發(fā)生的事情,。

 

   就在Main方法執(zhí)行前,CLR會(huì)檢測出Main的代碼引用的所有類型,。Main方法引用了一個(gè)Console類型,,這導(dǎo)致CLR分配給Console一個(gè)內(nèi)部結(jié)構(gòu)。在這個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)中,,Console類型定義的每個(gè)方法都有一個(gè)對(duì)應(yīng)的記錄項(xiàng),。每個(gè)記錄項(xiàng)都容納了一個(gè)地址,根據(jù)此地址即可找到方法的實(shí)現(xiàn),。

  在CLR分配給Console一個(gè)內(nèi)部結(jié)構(gòu)的時(shí)候,,需要對(duì)這個(gè)結(jié)構(gòu)進(jìn)行初始化,CLR將每個(gè)記錄項(xiàng)都設(shè)置成一個(gè)函數(shù),。這個(gè)函數(shù)是存在于CLR內(nèi)部的一個(gè)未文檔化的函數(shù),,JITCompiler。

  Main方法首次調(diào)用WriteLine時(shí),,由于記錄項(xiàng)被初始化為JITComplier,,JITComplier函數(shù)會(huì)被調(diào)用,調(diào)用的結(jié)果是,,JITComplier將WriteLine方法的IL代碼編譯成本地CPU指令,。然后,本地CPU指令被保存到一個(gè)動(dòng)態(tài)分配的內(nèi)存塊中,。JITComplier接下來將Console類型定義的WriteLine方法的記錄項(xiàng)設(shè)置成現(xiàn)在內(nèi)存塊的地址。

  一個(gè)方法只有在首次調(diào)用時(shí)才會(huì)即時(shí)編譯,,以后對(duì)該方法的所有調(diào)用都以本地代碼的形式運(yùn)行,,無需重新驗(yàn)證IL并把它編譯成本地代碼。

  下圖展示了第二次調(diào)用WriteLine時(shí)發(fā)布的事情,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多