作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題[問題] Dll 觀念請教
時間Tue Jan 31 12:21:27 2012
dll 觀念問題
最近一直對dll這個東西產生許多疑惑
我有爬文看之前
#1BZqC6Nx 的文章
和參考一些網路的文章
講法有一些出入
有人是講說
兩個process load同一份dll的話
OS只會load一份dll到memory
意思是說假如我有 A.exe配一個擺在自己exe同一個目錄的Foo.dll
和B.exe配一個擺在自己exe同一個目錄的Foo.dll
兩者用的dll檔名一樣 OS 會知道說Foo.dll被A load過了
所以B.exe在launch時就不load了?
那如果.dll只是剛好檔名一樣 其實內容根本不一樣, 這樣B要用Foo.dll 不是會產生
錯誤嗎?
(之前問一個資深的同事他說OS load dll是by name去判斷要不要再load一次)
如果真的是dll只load一份到記憶體
又有看到一些文章 和
#1BZqC6Nx那篇
大概是講說 用到的data都會獨立copy到自己process的address space, 我理解上就是會
各process擁有自己一份資料
互不相關
但這又跟上面說的dll只load一次 感覺無法觀念連貫起來
另外我又看到文章提到copy on write,
這又是跟上面的觀念 怎麼做一個融會貫通呢= =
自我解釋成
dll load進memory是by name 如果只有read的話就一直那一份
但如果要write資料 或是 呼叫一些function 用到一些local的變數 就會copy on write
複製一份 讓 彼此不會寫同一份資料
請各位給予觀念的指正
查了一段時間 但都沒找到一個很完整的觀念解釋
查到的通常都是怎麼做一個dll ....
我想這觀念應該跟linux的shared lib 一樣吧???
感謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.64.222
→ james732:推《程式設計師的自我修養》 (作者應該給我廣告費了XD) 01/31 12:25
→ akasan:以linux來講mmap是認在kernel裡面的fd 01/31 12:55
→ meconin:或許可以玩玩 Sysinternals Suite 裡面的 ProcMon.exe 01/31 16:15
→ diabloevagto:程式設計師的自我修養,這本書在你問的問題中都推到 01/31 16:42
→ diabloevagto:爛了...原po真的需要花時間去仔細看完,有系統的完整 01/31 16:43
→ diabloevagto:吸收過一遍,而不是一直在網路或討論區上找,相信會 01/31 16:43
→ diabloevagto:對你更有幫助才對的 01/31 16:44
→ diabloevagto:當然不是說你上來發問不對,有問題還是很歡迎發問, 01/31 16:44
→ diabloevagto:跟大家互相討論互相成長,但課本還是比較有系統的 01/31 16:45
推 mida:查一下博客來,這本書特價到今天。XDDD 01/31 19:07
→ diabloevagto:那本書真的很棒xd提到滿多細節的,而且是有實際看 02/01 00:21
→ QQ29:趕快買 02/01 00:31
推 h9602b:挖 好多人推喔 看來我該去天瓏買一本了~~ 02/01 12:07