DLL的問題 |
尚未結案
|
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
|
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
Hi,liangnet,您好!
小弟的一點愚見:一個DLL基本上類似於一個EXE文件(PE)。包含了代碼或資源,能夠被其他的應用程式調用。最主要的區別是,DLL不是可以獨立執行的文件。 DLL通過動態鏈結技術(dynamic linking)與其他應用程式共用代碼。當一個應用程式使用了一個DLL,Win32系統會確保記憶體中只有一個該DLL的拷貝,這是通過記憶體映射文件來實現的。DLL首先被調入Win32的全局堆,然後映射到調用這個DLL進程的空間。在Win32系統中,每個進程都被分配有自己的32位線行位址空間。當一個DLL被多個進程調用時,每個進程都會得到該DLL的一份映射。在Win32中,DLL是可以被看作是屬於調用該DLL進程自己的代碼。但這並不意味著,如果多進程調用一個DLL,實體記憶體就分配該DLL的每個實例。通過從系統的全局堆到調用該DLL的每一個進程的位址空間的映射,DLL映射於每個進程的位址空間。 綜上所述:小弟認為,FreeLibrary在理想情況下會釋放掉自己佔有的資源 =================================
<>人生在勤,不索何獲>
<>業精於勤荒於嬉,行成於思毀於隨>
<>臨淵羡魚不如退而結網>
------
人生在勤,不索何获? |
Albertz
初階會員 發表:2 回覆:57 積分:31 註冊:2002-09-05 發送簡訊給我 |
引言: DLL通過動態鏈結技術(dynamic linking)與其他應用程式共用代碼。當一個應用程式使用了一個DLL,Win32系統會確保記憶體中只有一個該DLL的拷貝,這是通過記憶體映射文件來實現的。DLL首先被調入Win32的全局堆,然後映射到調用這個DLL進程的空間。在Win32系統中,每個進程都被分配有自己的32位線行位址空間。當一個DLL被多個進程調用時,每個進程都會得到該DLL的一份映射。在Win32中,DLL是可以被看作是屬於調用該DLL進程自己的代碼。但這並不意味著,如果多進程調用一個DLL,實體記憶體就分配該DLL的每個實例。通過從系統的全局堆到調用該DLL的每一個進程的位址空間的映射,DLL映射於每個進程的位址空間。DLL是 code segment 是共用, data/stack segment 是使用 application 的行程空間 (process space). 舉個比較淺顯的例子來說, 你可以在 DLL 中要求一塊記憶體, 運算完後將 pointer 傳給 application 做處理. 這是因為 DLL 與 application 使用同一行程空間, 才有能力作資料交換. FreeLibrary 只有把 DLL 的 code 從該行程中"抽走", 但卻無法處理 data segment 裡面所留下的垃圾. |
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
引言:謝謝,真理越辨越明,小弟受益良多。哈哈,又偷學到一招,賺到了 ================================= <>人生在勤,不索何獲> <>業精於勤荒於嬉,行成於思毀於隨> <>臨淵羡魚不如退而結網>引言: DLL通過動態鏈結技術(dynamic linking)與其他應用程式共用代碼。當一個應用程式使用了一個DLL,Win32系統會確保記憶體中只有一個該DLL的拷貝,這是通過記憶體映射文件來實現的。DLL首先被調入Win32的全局堆,然後映射到調用這個DLL進程的空間。在Win32系統中,每個進程都被分配有自己的32位線行位址空間。當一個DLL被多個進程調用時,每個進程都會得到該DLL的一份映射。在Win32中,DLL是可以被看作是屬於調用該DLL進程自己的代碼。但這並不意味著,如果多進程調用一個DLL,實體記憶體就分配該DLL的每個實例。通過從系統的全局堆到調用該DLL的每一個進程的位址空間的映射,DLL映射於每個進程的位址空間。DLL是 code segment 是共用, data/stack segment 是使用 application 的行程空間 (process space). 舉個比較淺顯的例子來說, 你可以在 DLL 中要求一塊記憶體, 運算完後將 pointer 傳給 application 做處理. 這是因為 DLL 與 application 使用同一行程空間, 才有能力作資料交換. FreeLibrary 只有把 DLL 的 code 從該行程中"抽走", 但卻無法處理 data segment 裡面所留下的垃圾.
------
人生在勤,不索何获? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |