[問題] dll和記憶體的關係 觀念請教?
請教各位前輩
我一直很想把DLL搞得很清楚是什麼
但是我不知道有什麼書或式什麼資料 明確的介紹DLL的觀念...
我現在是 export 一個dll 裡面有個function : void PRINT(){ cout<<#}
而這個num是一個global的變數
(沒有export出來這變數, 但就算export出來也算是global吧?)
我兩隻程式都去load這dll 用GetProcAddress 去 呼叫PRINT
印出相同的位址
這好像不是巧合....但是因為我沒有確切的資料能夠解釋這是為什麼????
所以不知道該怎麼建立觀念..... 我google打 : dll memory, dll 記憶體 都goo不到
...
我又測試了兩個case
1.
把這dll 檔案 複製一份 並且把檔名 1.dll改成2.dll
這兩支程式(a.ex, b.exe) a load 1.dll 和b load 2.dll
&num印出來又是一樣的位址
2.
把這兩隻1.dll和2.dll 用同一個程式去load (a.exe load 1.dll和2.dll)
再呼叫個別的PRINT 印出來的&num就不一樣了
以上這幾個現象 不太知道原因
目前有的心得就是 dll 給不同的process load
他們的virtual address好像都會一樣 但mapping到 physical address就不一樣了
但是會一樣有什麼意義 這也是變成兩份阿?
問了一下朋友 好像還有分r/w data 和 r only data....
但是他也不清楚
資料也找不太到~~
可以請教各位是否能讓我建立完整的觀念呢~~??
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.64.222
→
03/04 12:39, , 1F
03/04 12:39, 1F
推
03/04 12:57, , 2F
03/04 12:57, 2F
推
03/04 13:07, , 3F
03/04 13:07, 3F
→
03/04 13:07, , 4F
03/04 13:07, 4F
→
03/04 13:08, , 5F
03/04 13:08, 5F
→
03/04 13:08, , 6F
03/04 13:08, 6F
→
03/04 13:09, , 7F
03/04 13:09, 7F
→
03/04 13:10, , 8F
03/04 13:10, 8F
→
03/04 13:11, , 9F
03/04 13:11, 9F
→
03/04 13:11, , 10F
03/04 13:11, 10F
→
03/04 13:12, , 11F
03/04 13:12, 11F
→
03/04 13:12, , 12F
03/04 13:12, 12F
→
03/04 13:13, , 13F
03/04 13:13, 13F
→
03/04 13:52, , 14F
03/04 13:52, 14F
推
03/04 18:51, , 15F
03/04 18:51, 15F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 4 篇):