2016-07-06 49 views
0

關於共享與靜態庫有關性能的論壇有幾個討論。但是,這些方法與編寫代碼完全相比如何?C++中速度更快:完全編譯還是鏈接到共享庫或靜態庫?

就我而言,我有一個類,它包含包含幾個for循環,這將通過從其他類(評估代碼)的方法進行多次調用了一些方法(在評估代碼)。我還沒有完成實施和測試一切。但是,爲了性能,我想知道是否應該將所有文件完全編譯(編譯器優化優勢?),或者分別編譯一些文件以生成靜態或共享庫。

+6

對於最深的遺憾,我必須帶來一個令人傷心的消息,那就是太陽第三顆行星上有多個C++編譯器和鏈接器在使用。我也很遺憾地宣佈,目前正在使用的每一個操作系統上的所有C++編譯器和鏈接器都沒有,我再說一次,沒有共同合作,並且同意哪個鏈接性能是最快的實現。 –

+0

我看到......但所有的東西都是平等的(操作系統和編譯器),有什麼可以說是三種方法如何比較性能明智的一般嗎? – Bruno

+2

如果你不需要編譯,編譯時間顯然會更快。運行時間不應完全依賴於動態/靜態/編譯,除非存在一些事先無法預知的細微緩存效果。 –

回答

0

這些方法將取決於你的編譯器和選項:

不使用庫: 編譯好,並構建系統會緩存結果,這應該是一樣快,因爲其他兩個。在實踐中,許多代碼庫的編譯時間不夠理想,經典的方法是將其分解成圖書館。

靜態: 速度可能會變慢,當你有一小部分: 因爲運行鏈接時優化(LTO)的機會,這可能需要一段時間

動態,這可能是比動態鏈接速度較慢因爲有關如何實現動態加載的細節。總之,除非你正在研究一些怪物項目,因爲你擔心人們在構建系統,所以把它全部保存在一個項目中,避免不必要的複雜調試。