[問題] 不同dll無法任意互相release resource?
在看 程式設計師的自我修養 第11章節..
前面雖然看的懵懵懂懂
但一直有個疑問不太了解
常常聽到有人把這當rule
"你在某dll alloc的resource 請你在那個dll 做 free, 否則"可能" 會出問題"
google 不確定有啥公定的關鍵字
http://stackoverflow.com/questions/4781460/who-allocates-heap-to-a-dll
這看到這邊好像有提到類似問題不過還是不太能理解
書中p349 Q&A
再談不同DLL or EXE使用不同的CRT 會發生啥事
這是上面這疑問的首要假設嗎?
一切都是因為用到的CRT可能不同 所以才有這個rule的產生嗎?
書中看到這 有幾個觀念想釐清
1. 某exe load了不管幾個dll, 每個dll都有自己的heap, 所以可以說heap是不連續的
virtual memory空間?
所以我malloc 若是A.exe就在A's heap, B.dll就是在B's heap這樣嚕? 甚至連stack
也會有分module 不同module有不同的stack?
2. 若CRT都是同一版, 是不是不管誰去new跟delete 理論上都不會出事?
若以上觀念沒問題
想問以下幾個疑問
1. A.exe使用靜態把CRT 編進去 使用了CRT已經是鎖死在A.exe裡面了
他load B.dll B.dll也是用靜態的方式bind CRT
若剛好他們編譯環境一模一樣
照理講就不會發生問題了?(誰new就要誰delete)
反之 若B.dll 剛好編譯到舊版的CRT 就可能發生問題嗎?
2. A.exe使用動態 連結CRT, 而B.dll 也是動態
假設我把這包程式丟給使用者X
他的CRT就只會有一個所以應該也不會發生問題?
3. 這種問題是不是只有牽扯到CRT這"版本不同 實作Memory management的方式不同" 還
是有其他的因素會導致這問題?
若他MM的algorithm並沒有改變, 也不會發生問題嚕?
4. 這有沒有專有名詞或是經典的討論文章呢
5. 是不是每台電腦非programmer 都有CRT的dll在system32裡面呢.....
因為沒有沒VS的電腦...無法確認
以上請各位指證
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.163.58.205
※ 編輯: QQ29 來自: 118.163.58.205 (01/15 18:07)
推
01/15 18:41, , 1F
01/15 18:41, 1F
→
01/15 19:37, , 2F
01/15 19:37, 2F
→
01/16 15:01, , 3F
01/16 15:01, 3F
→
01/16 15:02, , 4F
01/16 15:02, 4F
→
01/16 15:02, , 5F
01/16 15:02, 5F
推
01/16 16:18, , 6F
01/16 16:18, 6F
→
01/16 16:19, , 7F
01/16 16:19, 7F
→
01/16 16:19, , 8F
01/16 16:19, 8F
推
01/16 16:40, , 9F
01/16 16:40, 9F
→
01/16 16:41, , 10F
01/16 16:41, 10F
→
01/16 16:41, , 11F
01/16 16:41, 11F
→
01/16 21:56, , 12F
01/16 21:56, 12F
→
01/16 21:56, , 13F
01/16 21:56, 13F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章