dll內申請的記憶體可以由呼叫它的程式釋放嗎?
一般是哪裡申請哪裡釋放,誰申請的記憶體由誰釋放,這是封裝的基本原則。
dll內部(對外隱藏)的記憶體分配,顯然要dll自己處理啦。當然也可以由呼叫它的程式釋放, 但不推薦,高內聚,且不安全
dll外部的由外部程式分配後傳進dll,使用完後,可以由外部程式釋放,也可以呼叫dll內部函式幫助釋放。
如果匯出的是類,則可以在類中定義自我是釋放的Release匯出函式:
void release()
{
delete this;
}
COM的記憶體釋放就是採用這樣的方法
[ 知識點 ]
選摘 << WINDOWS核心程式設計>> 第19章 dll基礎
建立dll常常比建立應用程式更容易,因為dll往往包含一組應用程式可以使用的自主函
數。在dll中通常沒有用來處理訊息迴圈或建立視窗的支援程式碼。dll只是一組原始碼模組,
每個模組包含了應用程式(可執行檔案)或另一個dll將要呼叫的一組函式。當所有原始碼文
件編譯後,它們就像應用程式的可執行檔案那樣被連結程式所連結。但是,對於一個dll來說,
你必須設定該連鏈程式的/ dll開關。這個開關使得連結程式能夠向產生的dll檔案映像發出
稍有不同的資訊,這樣,作業系統載入程式就能將該檔案映像視為一個dll而不是應用程式。
在應用程式(或另一個dll)能夠呼叫dll中的函式之前,dll檔案映像必須被對映到調
用程式的地址空間中。若要進行這項操作,可以使用兩種方法中的一種,即載入時的隱含連結
或執行期的顯式連結。
一旦dll的檔案映像被對映到呼叫程式的地址空間中, dll的函式就可以供程式中執行的
所有執行緒使用。實際上, dll幾乎將失去它作為dll的全部特徵。對於程式中的執行緒來說,
dll的程式碼和資料看上去就像恰巧是在程式的地址空間中的額外程式碼和資料一樣。當一個執行緒
呼叫dll函式時,該dll函式要檢視執行緒的堆疊,以便檢索它傳遞的引數,並將執行緒的堆疊用
於它需要的任何區域性變數。此外, dll中函式的程式碼建立的任何物件均由呼叫執行緒所擁有,而
dll本身從來不擁有任何東西。
例如,如果VirtualAlloc函式被dll中的一個函式呼叫,那麼將從呼叫執行緒的程式地址空間
中保留一個地址空間的區域,該地址空間區域將始終處於保留狀態,因為系統並不跟蹤dll中
的函式保留該區域的情況。保留區域由程式所擁有,只有線上程呼叫VirtualFree函式或者程式
終止執行時才被釋放。
相關文章
- 請教一個java程式記憶體釋放的問題Java記憶體
- vector 的記憶體釋放記憶體
- 內網IP地址可以申請SSL證書嗎?內網
- 記憶體的分配與釋放,記憶體洩漏記憶體
- 為App申請更多的記憶體空間APP記憶體
- [CareerCup] 13.9 Aligned Malloc and Free Function 寫一對申請和釋放記憶體函式Function記憶體函式
- 正確釋放Vector的記憶體記憶體
- dbms_session.free_unused_user_memory; 可以釋放 部分的PGA記憶體Session記憶體
- 高質量的C程式碼.釋放記憶體 薦記憶體
- Linux釋放記憶體及手動釋放Oracle共享記憶體段Linux記憶體Oracle
- XCode釋放記憶體XCode記憶體
- linux釋放記憶體Linux記憶體
- golang 釋放記憶體機制的探索Golang記憶體
- 撥開由問題《Linux下malloc最大可申請的記憶體》帶來的重重疑雲Linux記憶體
- vector 避免記憶體頻繁分配釋放與手動釋放vector記憶體記憶體
- 誰建立誰銷燬,誰分配誰釋放——JNI呼叫時的記憶體管理記憶體
- 如何主動釋放 HeapIdle 的記憶體API記憶體
- 轉 linux 記憶體釋放Linux記憶體
- Linux釋放cache記憶體Linux記憶體
- linux 記憶體釋放命令Linux記憶體
- 未備案的域名可以申請ssl證書嗎?
- 沒有解析的域名可以申請SSL證書嗎
- Vector() 記憶體釋放 不得不說的故事記憶體
- C++ vector 釋放記憶體的兩種方法C++記憶體
- 如何釋放linux cache佔用的記憶體Linux記憶體
- android釋放記憶體的一個辦法Android記憶體
- C# 垃圾回收釋放記憶體C#記憶體
- FireFox記憶體自動釋放Firefox記憶體
- 記錄一下,linux釋放記憶體的方法Linux記憶體
- C/C++記憶體釋放應注意的問題C++記憶體
- 在 4GB 實體記憶體的機器上,申請 8G 記憶體會怎麼樣?記憶體
- vector clear() 方法 記憶體釋放問題記憶體
- C/C++記憶體分配以及釋放C++記憶體
- Linux之 手動釋放記憶體Linux記憶體
- mongodb釋放記憶體-切換日誌MongoDB記憶體
- Linux下如何釋放cache記憶體Linux記憶體
- Linux系統釋放cache記憶體Linux記憶體
- SSL證書可以使用中文域名申請嗎