[英]Execution time differences, are there any?
考慮這段代碼:
class A {
void methodX() {
// snip (1 liner function)
}
}
class B {
void methodX() {
// same -code
}
}
現在我可以走的另一條路是,我有一個類(AppManager),大多數成員都是靜態的,(從舊版代碼中,不建議我單身;))
class AppManager {
public:
static void methodX(){
// same-code
}
}
應該首選哪一個? 由於兩者都是內聯的,因此不應存在運行時差異,對嗎?
哪種形式更清潔?
現在,首先,這是一個很小的問題,您將不必擔心它,除非每幀調用函數數千次(並且您正在做“幀”很重要的事情)。
其次,如果將它們內聯,則將(希望)對代碼進行如此多的優化,以至於沒有任何跡象表明該函數是非靜態的。 這將是相同的。
即使沒有內聯,它們之間的差異也很小。 ABI會將“ this”指針放入一個寄存器(或堆棧)中,而這在靜態函數中是不會執行的,但是最終結果幾乎是不可測量的。
底線-以最簡潔的方式編寫代碼。 此時,性能不是問題。
我認為以內聯方式會更快。 因為內聯函數在編譯時已被代碼替換,因此無需保存寄存器,進行函數調用然后再次返回。 但是,當您調用靜態函數時,它只是一個函數調用,它比內聯函數具有更多的開銷。
我認為這是最常見的優化問題。 在編寫代碼的第一級,您會嘗試所有有助於編譯器的技巧,因此,如果編譯器不能很好地優化代碼,您就已經擁有了。 錯了 在編寫代碼的優化的第一階段,您要尋找的是干凈易懂的代碼,設計和結構。 到目前為止,這將使代碼更好,可以手動進行“優化”。
規則是:
如果您沒有足夠的資源來對代碼進行基准測試,請重寫該代碼,並花費大量時間進行優化,而不是不需要優化的代碼。 在大多數情況下,如果您的代碼結構合理,則很難獲得任何形式的優化來提高速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.