2013-03-11 67 views
0

在Windows中,如果有兩個進程分別使用同一個DLL,那麼顯然每個進程都會將DLL分別加載到它的地址空間中,而在Linux中共享對象加載一次並映射到不同的進程。有人能向我解釋Windows方法的優缺點嗎?Windows中的DLL加載

回答

2

我不確定這種差異是如此的嚴峻。通過加載DLL一次並將共享部分映射到每個進程中,Windows共享DLL的所有用戶之間除數據段之外的所有內容。但是,DLL中的任何全局數據都是針對每個進程單獨加載的,以便進程不會無意間共享數據。如果linux不是非常相似,我會感到驚訝,否則共享庫可能會造成重大的安全風險,更不用說潛在的可靠性問題了。這裏有幾個引用:

從計算器:

Are .dll files loaded once for every program or once for all programs?

維基百科:

http://en.wikipedia.org/wiki/Dynamic-link_library