2010-02-02 79 views
4

我正在使用Linux中的應用程序。它支持靜態和動態(.so)版本哪一個被推薦:使用靜態庫vs動態庫(共享對象)

從性能的角度來看,用戶應該使用哪個版本?該應用程序執行需要幾個小時CPU時間的計算任務。

使用一個lib比其他優勢嗎?

謝謝

+0

另見相關的問題在: http://stackoverflow.com/questions/2025455/loading-time-for-shared-libraries-vs-static-libraries – sateesh 2010-02-02 12:00:41

回答

2

通常情況下,你會使用動態庫來減少二進制文件的大小。除了應用程序的啓動可能無關緊要外,在運行時不會受到任何懲罰。

+2

動態庫有另一個優點:它們允許你改變函數(即應用bug修復),而無需使用此函數重新編譯所有程序。 – dbemerlin 2010-02-02 11:56:19

1

通常靜態綁定庫,因爲他們不具備定位和庫加載的開銷更快,但:一個多小時的節目的性能差異不宜過小的通知。

無論如何,要真正確定的唯一方法是:自己評估一下。

3

從性能的角度來看,除非經常加載和卸載動態庫,否則差異是最小的。

唯一的區別是動態庫在需要的時候被加載,而不是被內置到(因此永遠存在,無需加載時間)您的可執行文件。

動態庫也可以被多個可執行文件重用。這是我過去使用動態庫的主要原因。

4

從視圖純性能點:

共享對象被編譯爲PIC(位置無關的代碼),其理論上可以稍微低效率在某些體系結構(包括x86)然後正常碼。

但是,我不認爲這會有什麼真正的區別。

從任何其他點

使用共享對象,它比靜態庫太多的優勢,它僅僅是更好的選擇。