C 關於託管程式和非託管程式的區別

2021-06-11 03:08:40 字數 512 閱讀 5705

一般的乙個可執行檔案的內容都包含乙個pe頭,系統根據pe的資訊找到入口函式,通過執行入口函式中的**來執行可執行程式。託管程式的檔案相對於非託管程式還包含了乙個clr表頭檔案以及其他clr需要的資訊。

1.非託管程式的執行過程

在非託管程式中,可執行裡面儲存的是機器**,cpu可以直接載入並執行,當系統載入了可執行程式後,系統就將可執行檔案的段基址加上偏移位址形成實際的實體地址,並直接載入到記憶體中執行。

2.託管程式的執行過程

託管程式的可執行檔案中,包括是中間語言以及元資料,當然不能直接執行,必須啟動clr,由clr對中間語言進行即時編譯機器**,並載入到記憶體裡面執行(具體過程「程式在進入入口函式前會提前跳轉到mscoree.dll中,呼叫它的**來啟動clr並完成一些初始化工作)。當然,il中的方法並不是每次被呼叫都會被編譯一次,而是它只有在第一次呼叫時才進行編譯,即時編譯會將方法名稱以及對應的入口存放在對映表中,當下次呼叫該方法時,會直接從對映表裡去而不是再編譯一次。

LINUX 用systemctl 託管程式

系統 centos 7 能夠開機啟動 能夠一鍵開啟,關閉,重啟 注意檔案編碼的問題 unit description service after network.target service 可以包含的值為 forking oneshot dbus notify idel其中之一。type fork...

C 託管程式中的資源釋放問題

第乙個就是很多人用.net寫程式,會談到託管這個概念。那麼.net所指的資源託管到底是什麼意思,是相對於所有資源,還是只限於某一方面資源?很多人對此不是很了解,其實 net 所指的託管只是針對記憶體這乙個方面,並不是對於所有的資源 因此對於 stream 資料庫的連線,gdi 的相關物件,還有 co...

64位windows中執行託管程式

在64位 windows 上存在著 32位和 64位兩個版本的 clr。本文介紹如何通過 clr自帶的工具 ldr64.exe corflags.exe 指定託管程式 寄宿 的 clr版本,並且和大家分享筆者研究這兩個工具運作機理的過程以及使用的 秘密 procmon dumpbin 在過去的一年中...