我正在使用Linux中的應用程序。它支持靜態和動態(.so)版本哪一個被推薦:使用靜態庫vs動態庫(共享對象)
從性能的角度來看,用戶應該使用哪個版本?該應用程序執行需要幾個小時CPU時間的計算任務。
使用一個lib比其他優勢嗎?
謝謝
我正在使用Linux中的應用程序。它支持靜態和動態(.so)版本哪一個被推薦:使用靜態庫vs動態庫(共享對象)
從性能的角度來看,用戶應該使用哪個版本?該應用程序執行需要幾個小時CPU時間的計算任務。
使用一個lib比其他優勢嗎?
謝謝
通常情況下,你會使用動態庫來減少二進制文件的大小。除了應用程序的啓動可能無關緊要外,在運行時不會受到任何懲罰。
動態庫有另一個優點:它們允許你改變函數(即應用bug修復),而無需使用此函數重新編譯所有程序。 – dbemerlin 2010-02-02 11:56:19
通常靜態綁定庫,因爲他們不具備定位和庫加載的開銷更快,但:一個多小時的節目的性能差異不宜過小的通知。
無論如何,要真正確定的唯一方法是:自己評估一下。
從性能的角度來看,除非經常加載和卸載動態庫,否則差異是最小的。
唯一的區別是動態庫在需要的時候被加載,而不是被內置到(因此永遠存在,無需加載時間)您的可執行文件。
動態庫也可以被多個可執行文件重用。這是我過去使用動態庫的主要原因。
從視圖純性能點:
共享對象被編譯爲PIC(位置無關的代碼),其理論上可以稍微低效率在某些體系結構(包括x86)然後正常碼。
但是,我不認爲這會有什麼真正的區別。
從任何其他點
使用共享對象,它比靜態庫太多的優勢,它僅僅是更好的選擇。
另見相關的問題在: http://stackoverflow.com/questions/2025455/loading-time-for-shared-libraries-vs-static-libraries – sateesh 2010-02-02 12:00:41