2011-04-09 137 views

回答

3

作爲EXE部分載入的全局數據和作爲DLL一部分加載的全局數據都位於同一進程的虛擬內存空間中,但位於與這些EXE和DLL文件中定義的段對應的不同區域中。由於它們位於相同的虛擬內存空間中,DLL中的代碼可以使用EXE全局指針指向EXE全局,反之亦然。

3

答案是肯定的。 MSDN報價: 「加載DLL的每個進程都將其映射到其虛擬地址空間中」。 轉到此link,你會發現你的疑問的答案。 祝你好運

+0

謝謝,我希望我會幸運! – Guillaume07 2011-04-09 20:26:52

+2

這是一個誤導。它當然不會「在相同的內存區域」,它只是在相同的進程地址空間中。答案是不。 – 2011-04-09 20:38:53

+0

@漢斯:感謝那 – Guillaume07 2011-04-09 20:44:14

0

你的標籤指示C++,但答案也可能取決於平臺/操作系統。在windows下,每個進程都會複製數據。下面是來自MSDN Run Time Behavior article片段:

每當一個新的進程試圖 使用DLL時,操作系統 創建DLL的 數據的單獨副本:這就是所謂的進程連接。

在單個進程中,全局數據很好,...全局。