發現看過好幾遍還是會忘記,因水平有限理解的不是很到位。歡迎各位大神及時指正。
clr執行模型
1.1編譯器將源**編譯成託管模組
託管模組:是標準的windows可移植執行體檔案(pe32(32位機器),或者pe32+(64位機器))它們需要clr 才能執行
1.2 編譯器將託管模組合併成程式集
託管模組有四個概念:
pe32,pe32+檔案 檔案頭
clr頭 :標識了要求的clr版本、標識、託管模組入口方法
元資料 :資料表集合,一方面描述了模組定義的東東,另外一方面描述了引用的一些東東。東東=型別和成員。(編譯器智慧型感知的資料**)
il**(中間語言)執行時候將il**轉化為本機cpu指令
多個託管模組合併成程式集
1.3 載入公共語言執行時(clr)(雙擊可執行程式時候載入)
電腦上安裝了.net framework。開啟exe程式的時候,windows系統檢查exe檔案頭,決定載入64還是32位的mscoree.dll,程序的主線程呼叫mscoree.dll 的乙個方法,這個方法會初始化clr,再載入exe程式集,然後呼叫exe的入口方法即main函式。隨即託管應用程式啟動並且執行。
clr的核心功能:
記憶體管理、程式集載入、安全性、異常處理和多執行緒
因此面向clr程式設計的所有語言都具有以上特性
1.4執行程式集的**
執行過程:執行可執行檔案時候,先是framework 初始化了clr,clr有託管模組的入口方法。執行exe之前clr做如下幾件事情:
檢測你的方法種引用的所有型別,檢查之後分配乙個內部結構來管理這些被引用的型別。每個型別定義的所有方法,重點(每個型別的所有方法)都有乙個對應項,每個對應項都有乙個位址,根據位址就能找到方法的實現。
初始化剛才的那個結構時候每個記錄項呢都會被設定成包含在clr內部的未編檔函式(成為jitcompiler),方法內部每個方法被首次呼叫時候發生了如圖的事情。
第二次執行時候下圖:第二次去執行writeline函式呢?此時內部結構中writeline函式入口的位址指向的已經是編譯好的cpu指令的位址了,所以也就不會去執行jitcompiler這個函式。
第一章 CLR的執行模型
編譯器將源 編譯為託管模組.託管木塊包含 pe32或pe32 頭 clr頭 元資料il 中間語言 pe32頭的檔案可在32或64位的電腦上執行,pe32 的只能在64上執行.window64位版本提供了乙個wow64的技術,允許32位的程式執行.clrver.exe能夠列出一台電腦上安裝的所有的cl...
第一章 CLR的執行模型
概念篇 可由多種程式語言使用的執行環境,提供記憶體管理 程式集載入 安全性 異常處理和執行緒同步等支援。規範化的型別定義和管理,比如 字段 方法等,又比如繼承等特性。針對clr cts定義的最基本的組建。標準的32位mircorsofte windows 可移植執行提 pe32 檔案 或者是標準的6...
CLR讀書筆記 第一章 CLR的執行模型
參考了jianqiang bao的筆記 1.1 將源 編譯成託管模組 1.生成什麼型別的應用程式或者組建 檔案 1 clr common language runtime 公共語言執行時 可由多種語言使用的執行時 就是乙個執行時環境 什麼是clr.參考 在clr監視下執行的程式屬於 託管的 不在cl...