寫在前面的話:
名詞:
il:全稱是intermediate language(中間語言),也叫它組合語言,平時用任何語言寫的**原始碼都會通過對應的編譯器編譯成il**,il語言也是一種物件導向的語言,不過難以閱讀,所以很少有人會直接使用它,更多的使用場景都在軟體安全方面 。
clr:全稱是common language runtime (公共語言執行時),我們平時用任何語言寫的**都會通過對應的**編譯器執行編譯操作生成可供cpu執行的cpu指令,並交由執行,而把這些cpu指令交給cpu執行的操作是有clr來完成的,準確的說是clr的jit編譯器完成的。
jit:全稱是just-in-time(即時),我們平時寫的**到底是如何被計算機識別並執行的,就是通過jit編譯器來完成,jit是clr中的乙個元件,專門負責編譯il**並生成cpu指令,交由cpu執行,只有cpu指令才是計算機能夠識別的語言。
cts:全稱是common type system(通用型別系統),c#的編譯器到底是遵循什麼樣的規範來對我們寫的**進行錯誤檢查的?cts就是這樣的規範,它是由microsoft提出的用來規範型別的定義和行為的規範。
cli:全稱是common language infrastructure(公共語言基礎結構),它是微軟提交自身的cts和.netframework交由ecma制定的標準。
(iso)和國際電子技術協會(iec)。ecma是「european computer manufactures association」的縮寫,中文稱歐洲計算機製造聯合會。是2023年成立的旨在建立統一的電腦操作格式標準--包括程式語言和輸入輸出的組織。
p\invoke:跨平台操作的統稱,c#的**稱為託管**,而其他語言則是非託管**,通過dllimport特性能夠實現跨平台操作。
小結:我們學習的c#語言實現的功能只是clr全部功能中的一部分,各種語言的功能都只是實現clr的一部分功能,所以如果能夠跨語言互操作,那就能最大限度地使用clr提供的功能了,而跨語言是it發展的最大目標。
類:
型別例項化時究竟做了什麼?
借用書中的演示圖:
上圖是**執行過程中建立的執行緒在執行**時的記憶體解析圖,執行緒在啟動時會建立1m左右的記憶體空間,**執行時會根據具體執行到的**通過jit編譯器動態建立記憶體並儲存對應的cpu指令,這個過程中涉及到了型別的例項化過程,所以暫時把這張圖放到這裡來,並為之後的程序執行緒的概念進行提前預知。型別在例項化的時候實際上是呼叫的該類的建構函式,建構函式會根據型別自身的屬性、字段、事件和方法計算出占用記憶體空間的總和來在記憶體中開闢一塊連續的記憶體空間,這塊記憶體空間包含了幾塊內容,型別物件指標、同步索引塊、例項字段。型別物件指標其實就是type型別例項的記憶體位址,在類例項化時都會在同時例項化type型別,type例項儲存的是類例項化時生成的例項的一些底層資訊,包括type例項自身的指標,同步索引塊,靜態字段,和cpu指令集,cpu指令集儲存的是例項化類在使用自身的屬性、字段、事件、方法時即時編譯的cpu指令。也就是說型別在例項化時,除了會建立自身所需的必要的記憶體空間外還會額外的建立其他的記憶體空間,而這塊記憶體空間儲存的是指標,指標指向的是當前例項類更為底層的資料。同步塊索引是用來儲存**執行過程中類變數在執行棧中的索引,便於jit編譯器能夠準確地查詢到變數並賦予類例項的記憶體位址。
CLR via C 讀書筆記 常量和字段
常量 constant 字段 field 欄位是一種資料成員,其中容納了乙個值型別的例項或者對乙個引用型別的引用 字段修飾符 clr術語 c 術語 說明 static static 這種欄位是型別狀態的一部分,而不是物件狀態的一部分 instance 預設 這種欄位與型別的乙個例項關聯,而不是與型別...
《軟體架構設計》學習筆記 1 閱讀感悟
接上篇。這幾日將全書通讀了一遍,最大的感受有兩個 思維方式的變革,具體點說,就是考慮問題的視角的不同。視角不同,你看到的東西或許就是不一樣的。這有點像 盲人摸象 的意思。盲人摸象作為乙個反面教材,被用來告誡人們看待問題要全面。可是,反過來想一下,如果沒有區域性的體驗和觀察 沒有對於各個區域性的認識和...
《資治通鑑》讀書筆記及閱讀感悟2200字
資治通鑑 讀書筆記及閱讀感悟2200字 1.用夏桀,商紂暴虐昏君和商湯,周武王仁德明君做比較,因為人民歸心,上天賜名要不然就永遠要恪守臣節至死不渝。又用商朝的微子取代紂王,商朝可以永配上天。吳國以季禮做君主,開國之君太伯也可永享祭祀。可以二人就算是國家滅亡也不願意做君主就是因為禮教不可破壞。當時名分...