2010-02-12 32 views
2

C中的靜態函數可能會更快,因爲編譯器的優化器可以看到所有的調用站點,因此可以優化被調用函數的epilog和序言?靜態函數更快?

+0

這個問題實際上是一個合法的點評分問題,並使其成爲社區wiki會阻止合法答案。 :-)(即我認爲人們不願意回答「真正」的問題,如果它不會幫助他們獲得代表)。 – 2010-02-12 15:38:51

+0

@Chris:我希望我知道這一點。我現在可以改變它嗎? – Mike 2010-02-12 15:50:46

+0

不,一旦帖子變成CW,就沒有辦法通過設計來解除它。請參閱:http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts-on-stack-overflow – 2010-02-12 15:54:09

回答

3

它理論上可以。然而,同時一些現代編譯器可以執行所謂的「全局優化」,其基於分析跨翻譯單元的代碼之間的關係。這可以包括分析整個程序中給定函數的所有調用站點(而不是單個翻譯單元),並可能將這種優化擴展到非靜態函數。

2

它可以使編譯器更願意內聯,是的。但是,一如既往,這取決於編譯器。您必須測試並檢查輸出組件以確保。

4

如果您的函數是在與定義的函數相同的翻譯單元中調用的(顯然需要使用static函數),編譯器可以輕鬆地內聯此類調用,而不管函數是否聲明爲static

一些質量編譯器也將執行整個程序優化,因此即使對不同翻譯單元中的函數調用也可能發生內聯和其他優化。

+1

是的!你能說'LLVM'嗎?在編程實踐中看起來像絕對的東西往往是曇花一現。 – 2010-02-12 15:41:59

+0

@Tim:+1 <3 LLVM(和其他動態編譯系統)。但是,嚴重的是,甚至更高端的Visual C++版本也會爲你完成整個程序的優化。 – 2010-02-12 15:44:07

+1

貧窮的海灣合作委員會還不能做:(但我聽到工作正在進行中,以添加它。 – 2010-02-12 15:57:15