簡體   English   中英

執行時間有差異嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM