2010-01-09 41 views
2

假設可執行文件foo.exe是基於靜態庫構建的,並且該foo.exe的6個實例同時在計算機上運行。 由於除RAM上的讀寫部分之外,所有代碼都是相同的(只讀部分),因此RAM中這6個實例之間是否會共享以提高性能?可執行文件的多個實例(使用靜態庫構建)共享RAM上的任何內容

我知道,如果上面的foo.exe使用共享庫,即使有6個實例只運行這些共享庫的1個實例將在RAM中。

回答

6

這取決於操作系統。

對於Linux和Solaris,所有實例都將共享包含代碼(或正確調用的文本)的內存頁面。

它們也可以共享源自可​​執行文件(即全局數據和靜態數據)的數據頁面。這些頁面會與copy-on-write或COW技術共享。只要實例不修改數據頁面,它們將被共享。但是一旦一個實例修改了一個數據頁面,它就會得到它自己的副本。

我猜測,現代版本的Windows做同樣的事情,但我不知道肯定。

+0

謝謝你的迴應。但是如果文本頁面被共享,那麼與靜態庫相比,我們對共享庫有什麼特別的優勢?是否有任何文件/網址可以指向我獲得更多信息。 – sud 2010-01-09 14:18:16

+0

共享庫在由多個可執行文件使用時也共享內存。如果foo.exe和bar.exe都鏈接到共享庫X,共享庫X將只在內存中加載一次。但是,如果foo.exe和bar.exe鏈接到靜態庫Y,則在運行foo的進程和進程運行欄之間將不會共享。 – 2010-01-09 16:42:02

+0

@solotim - 如果有一個你感到困惑的特定問題,我很樂意澄清。 – 2010-04-26 23:02:19