淺析loadlibrary時dll中的全局變量

對於自定義dll,(非系統dll):

多進程分別加載dll時,由於各進程的地址空間是相互獨立不可見的,dll的數據段是每個進程一份,全局變量互不影響。

同一個進程的多個線程多次loadlibrary加載dll時,第一次loadlibrary時,進程載入指定的動態鏈接庫,並將它映射到當前進程使用的地址空間。第二次及以後loadlibrary時,只會影響module的引用計數,返回的影像和句柄都是一樣的。當然,全局變量也是同一個內存地址,多線程中,一次更改,全部可見,需要同步。


對於系統dll,使用虛擬地址的高位地址,用戶地址空間不可見,系統啓動的時候已經全部加載,運行在該系統下的所有進程具有相同的全局變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章