2011-08-24 27 views
0

使用const int &var形式參數代替const int var有什麼好處嗎?使用(const int&var)形式參數代替(const int var)會有什麼收穫嗎?

我知道大結構中的優勢,但對於POD,指針的大小通常與實際數據大小相同。所以我想答案是「沒有優勢」。但我認爲也許通過價值語義複製一次到堆棧,再次複製到堆棧的一個區域以便於參考(比如說一個寄存器)。或者可能不是。事實上,它可以INFACT更好通過值傳遞,

http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

由於引用通常被C++實現使用指針,和解除引用一個指針是不是直接訪問它比較慢,訪問由參考傳遞的值是比訪問按值傳遞的值慢。

但是,這回到了我所說的關於複製堆棧的內容。我只是偏執狂吧?這種行爲是爲編譯器擔心而不是我。

我可以單步組裝我知道,但是,好吧,谷歌搜索速度更快,它變成了空白。

+1

最後,它可能是微不足道的值得優化。 – Dawson

+0

@Toolbox,我不知道,手機上的複雜應用程序似乎很受歡迎。 – John

+2

這種複雜性正是我認爲有幾十個其他優化,你會得到更多的性能提高。 – Dawson

回答

3

考慮一下:

非基準

  • 分配堆棧
  • 複製值到堆棧
  • 呼叫像往常一樣
  • 使用功能上的一個int變量在堆棧上

參考

  • 分配一個指針堆棧上
  • INT的複製地址堆棧
  • 呼叫像通常的
  • 解除引用堆棧(在可變的功能在同一個可能多次功能)
  • 使用變量

使用參考版本稍慢。一般來說,讓編譯器擔心它。如果它是一個只讀值,只需給它一個普通的舊int。如果您需要修改調用者的值,請使用引用或指針。

當然,這隻適用於像int這樣的小數據類型。如果你正在討論像結構或類似的東西,那麼使用引用可能會更快。

+2

指針通常不會比32位機器AFAIK上的int大。 –

+0

我不認爲大多數32位處理器上的指針大於整數。 http://stackoverflow.com/questions/589575/size-of-int-long-etc/589685#589685 –

+0

@Seth Carnegie確實沒有太大的區別(善良,也許4字節在堆棧上浪費!雖然操作速度不會太慢),但最多隻有一樣快,最壞的情況是慢一點。那爲什麼呢? – Voo

1

當你傳遞一個引用時,你複製引用的值,都是一樣的。當你使用它時,你會間接浪費幾個週期,但除此之外沒有性能差異。

當然,如果拋棄常量,或者如果在其他線程上更改引用值,程序行爲可能會有所不同。

+0

只是做基本的算術,只是注意到他們仍然使用普通舊(int var)作爲fp。 – John

相關問題