關於C ,CLR,程式集,AppDomain

2022-04-25 23:30:51 字數 730 閱讀 1980

c#中的程式集形式上是*.exe或*.dll,兩者的區別是是否有程式的入口函式。程式集是.net型別、**、資源的集合。程式集又可分為動態程式集和靜態程式集。

還記得程式的執行過程麼,編譯、鏈結、裝入,鏈結程式將編譯後的目標程式和用到的庫函式(c++中的include指令就是用來查詢庫的)鏈結在一起形成乙個裝入模組(可有多個模組)。當然裝入又分為絕對裝入、可重定位裝入、動態執行時裝入。

可重定位裝入:絕對裝入一般適合於單道程式,對於多道程式來說,每個模組的裝入都要進行位址轉換,給出相對位址,這樣每次定址都要和相對位址相加得出絕對位址,這些都是在裝入時就進行轉換,又稱為靜態重定位。匯程式設計序時指定的cs,ds段就是如此。

動態執行時裝入:程式實際上在記憶體中要進行移動(例如換入,換出),這樣位址就會變動,對於裝進記憶體的目標快就有可能被換出,因此不能在裝入時就把位址轉換掉,要等到程式的執行時(定址時)才進行轉換,當然要有重定位暫存器支援。

當然鏈結也分為靜態鏈結、裝入時動態鏈結、執行時動態鏈結,它們最大的區別就是是否程式在執行時是否就已經裝入記憶體(也就是按需裝入).

動態程式集就是按需裝入應用程式域的(類似於vc中的資源檔案)。

靜態程式集:儲存在磁碟上的了執行檔案中,(。。。。。。。。。。有點疑惑)

當然程式集又分為私有程式集和共享程式集。。。。。。。

所有這些的執行都是在clr(動態語言執行時)環境裡進行的,由它虛擬出堆疊,因此可以實現跨平台,但要求實現clr或類似於clr的東西,當然clr也只是這種架構的一種實現。

CLR 關於強命名程式集

如何建立強命名程式集 strong name assembly 建立乙個強命名程式集首先需要獲得乙個用強命名實用工具 strong name utility,即sn.exe,net sdk自帶 產生的金鑰。下面簡要介紹一下sn.exe的一些用法。要產生乙個公鑰 私鑰對 a sn k mycompan...

CLR 關於強命名程式集

如何建立強命名程式集 strong name assembly 建立乙個強命名程式集首先需要獲得乙個用強命名實用工具 strong name utility,即sn.exe,net sdk自帶 產生的金鑰。下面簡要介紹一下sn.exe的一些用法。要產生乙個公鑰 私鑰對 a sn k mycompan...

關於跨程式集的反射(續)

以前曾寫過一篇 關於跨程式集的反射 的blog,關於跨程式集載入型別,文中使用的是方法是 先載入目標型別所在的程式集,再使用 assembly.gettype方法獲取型別。文後luna object name datastreamhelper type datacenterbase.common.d...