【转】跨DLLnew delete问题
【轉(zhuǎn)】跨DLLnew delete問題
轉(zhuǎn)兩篇文章來說這個問題的
鏈接1:https://blog.csdn.net/notebook2001a/article/details/6647850
鏈接2:https://blog.csdn.net/zj510/article/details/35290505? 這篇文章疑點很多,有時間再細(xì)究,特別是下面這段
------------------------------------------------------------------------------------------------------------------------
根本原因
假設(shè)DLL是靜態(tài)link crt (MT),EXE是動態(tài)link (MD)。我畫了個示意圖。
------------------------------------------------------------------------------------------------------------------------
個人理解:
動態(tài)鏈接與靜態(tài)鏈接
靜態(tài)鏈接:此時靜態(tài)庫就像一個obj文件一樣被縫合進(jìn)了EXE
試想若每個程序都把系統(tǒng)的庫靜態(tài)鏈接入自己中,N個程序?qū)?fù)制N份系統(tǒng)庫,運行時將重復(fù)大量的內(nèi)存
而動態(tài)鏈接庫則是共享庫只加載一份到內(nèi)存中,各程序共同使用它。
因為每個進(jìn)程都有自己的虛擬空間,這個空間就是CPU的尋址范圍,32位CPU,尋址能力是4GB,
就是說32位CPU上,每個進(jìn)程的虛擬內(nèi)存都是4GB
那么,由于動態(tài)鏈接庫不是縫合到EXE中的,因此也不能映射到EXE的進(jìn)程中,
故,動態(tài)鏈接庫加載到內(nèi)存中時也是有獨立的虛擬空間的,
這就引出了一個著名問題:跨鏈接庫 NEW/DELETE的問題,
在一個DLL中用NEW申請內(nèi)存,在另一個DLL或EXE中 DELETE釋放內(nèi)存可能會出現(xiàn)問題,
?
參考文章:
VS項目屬性中C/C++運行庫 、MT /MTd /MD /MDd
posted on 2018-08-08 14:33 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結(jié)
以上是生活随笔為你收集整理的【转】跨DLLnew delete问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】托管C++
- 下一篇: 【转】PBR基于物理的渲染