重讀C#進階編程之.net體繫結構

來源:互聯網
上載者:User
   時隔這麼長時間,今天重新讀了C#進階編程,對於之前模糊的東西,總算有點清晰了,可能跟最近拜讀園子裡一些大牛的文章有關吧。
 
 我再一次意識到,CLR在整個.net體繫結構中的位置:整個.net framework的核心。簡單的來說,我們所編寫的所有原始碼(包括.net支援的所有語言),最終都要被編譯成MSIL(中繼語言),而後CLR則採用JIT的方式把IL編譯成平台目標代碼。
 那麼為什麼要採用這種中繼語言的方式呢?
 1.可以使平台無關:因為不管那種語言編寫的源碼(vb,c#,C++),都會編譯成IL,而後CLR會根據各自平台編譯目標代碼,這樣就實現了平台無關。但是目前好像還沒能實現(只能在window環境下運行)。
   2.JIT編譯提高效能。所謂JIT,即只編譯應用程式調用的那部分代碼,而沒有用到的就不去編譯,從而減少全部編譯造成的效能損失。另外,凡是編譯過的代碼都會暫時儲存起來,在退去應用程式之前如果再次調用,就可以減少編譯時間。
   3.實現語言互操作:同樣道理,因為不管什麼語言,都要編譯成統一的IL,這樣才有了互操作的可能。這裡不得不提到CTS(一般型別系統),也就是說,不管哪種.net程式設計語言,他們的資料類型都能在CTS中得到映射(找到對應的資料類型),而CTS恰恰定義了可以在中繼語言中使用的資料類型。
 中繼語言的一個特點是它是基於強型別的,所謂的強型別,即每個變數在定義的時候必須明確其資料類型(這和VB不同,VB是弱類型化的語言),這樣做也有幾個好處:
   1.安全:如果定義有誤,也是編譯時間錯誤,便於及時更正。
   2.記憶體配置和記憶體回收(GC):定義明確的資料類型,記憶體配置的時候就可以明確的根據資料類型分配對應的記憶體大小;同時一旦GC檢查到某對象不再被引用要回收時,能夠釋放對應的記憶體空間。
  對於GC,還有幾點需要注意:
   1.GC只對於參考型別的資料有效,而値類型的變數在超出其範圍後自動釋放所佔記憶體。
   2.GC的運行是不確定的,什麼時候調用它有CLR決定。當然我們手動調用運行它。

   裡面還涉及到兩個重要的概念:應用程式定義域和COm組件,還不是太明白,等搞清楚了補上~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.