看板 C_and_CPP 關於我們 聯絡資訊
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