Kernel

.text 部分是否在載入的 ELF 執行檔之間共享?

  • November 29, 2019

例如grep,如果一個程序正在執行,而使用者執行另一個實例,這兩個實例是否共享它們之間的只讀.text部分以節省記憶體?主要可執行文本共享的共享是否與共享庫類似?

這種行為是否在 Linux 中表現出來?如果是這樣,其他 Unices 也這樣做嗎?

如果這不是在 Linux 中完成的,那麼實現通常作為共享庫並行執行多個實例的執行檔是否會帶來任何好處,而被呼叫的執行檔只是呼叫庫中的主函式?

Unix 共享執行檔,共享庫被稱為共享(duh …),因為它們的記憶體映像在所有使用者之間共享。

即,如果我執行 bash(1) 的兩個實例,並在其中一個實例中執行 vim(1),我將在記憶體中分別擁有一個 bash 和 vim 執行檔的副本,並且(因為兩個程序都使用C 庫)一份 libc。

但更好的是:來自上述執行檔/庫(文件)的磁碟副本的 Linux 頁面。所以留在記憶體中的只是那些最近使用過的頁面。因此,很少使用 vim 命令或 bash 錯誤處理的程式碼、未使用 libc 中的函式等等只會佔用磁碟空間,而不是記憶體。

引用自:https://unix.stackexchange.com/questions/491681