2013-02-11 44 views
1

我讀過最好有內部鏈接(對於變量,自由函數等),因爲這會減少從特定編譯單元「導出」的符號數量。這樣建立時間可能會更好。外部鏈接是否增加鏈接/構建時間?

這是真的嗎?

使用內部鏈接的另一個優點是名稱衝突不會有任何問題。

參考:Large-Scale C++ Software Design

+2

我對此表示懷疑。如果你真的可以自由選擇,那就意味着首先不需要鏈接,所以你不必爲此付出代價。只是有一個出口的符號應該不會很重。重要的區別在於具有*多個*內部鏈接的拷貝與一個單獨的外部鏈接版本的對比。 – 2013-02-11 09:24:55

+0

所以可能它只是在obj/o文件中的一些額外的大小... – fen 2013-02-11 09:29:11

回答

1

在理論上是的,但是...... C++對泛型編程的發展。名稱空間的引入限制了名稱衝突問題。

以「僅包含頭文件的庫」的形式編寫程序總是比較頻繁的,它包含從一個包含主目錄實例化一個「管理器對象」的主文件,該文件負責所有的編排和供應最後的手段「抓住」最終逃脫的例外。長符號表可以通過「預編譯頭文件」更快地完成。

從這個意義上說,所有的聯繫都是「內部的」,因爲沒有什麼可以「導出」。

更一般地說,很少外部鏈接導致更快的鏈接時間,很少的內部鏈接導致更快的編譯時間。當內部和外部表格彼此平衡時,最佳最小值最有可能。但還有很多其他重要的因素需要關注。

我不知道今天的標準是否仍然可以被認爲是「好的」:你是否注意到它的建議 - 例如 - 關於迭代器的全部內容,除了今天的標準庫呢?

+1

這本書並沒有那麼糟糕,但我很想看到'第二版',至少從2006年...或更好的2013年:) – fen 2013-02-11 09:46:50

+0

@ fen:true:C++ 11在「優化」領域改變了很多東西,至少大多數現存的C++圖書至少要被重新審視。 – 2013-02-11 09:52:37