2011-03-06 58 views
10

當調用一個提供簡單數據類型的函數時,它的性能更好 - 讓它填充內存位置(通過指針傳遞)或使其返回簡單數據?傳遞引用到輸出位置vs使用返回

我過於簡單的例子這裏返回的5靜態值,但假設查找/功能,決定了返回值將是在現實生活中的動態...

常規邏輯會告訴我的第一種方法更快,因爲我們作爲參考,而不必返回副本作爲第二方法操作...但是,我想別人的意見。

感謝

void func(int *a) { *a = 5; }

或...

int func() { return 5; }

回答

8

一般來說,如果你的函數像一個函數一樣(即返回一個邏輯值),那麼最好使用int func()。即使返回值是一個複雜的C++對象,有一個名爲Return Value Optimisation一個常見的優化是避免了不必要的對象拷貝,使這兩種形式在運行時的性能大致相當。

1

這是一種低層次的東西,它是很難看到任何區別。

4

只要返回的內容足夠小以適應寄存器,大多數編譯器都會在寄存器中返回一個值。這是非常不尋常的(而且通常幾乎不可能),因爲其他任何事情都比這更有效。

1

簡單的答案:這取決於。

這取決於所使用的類型,它們是否可以廉價複製(或根本不需要),編譯器是否可以在某些情況下使用RVO,使用某種形式更好地嵌入事物...

使用什麼樣的背景下才有意義。

2

在我看來,除非你知道一個原因,或者你必須從函數返回多個值,否則總是使用return。返回一個內置類型是非常高效的,無論與通過指針返回的差別如何,它必須可以忽略不計。但是,真正的好處在這裏使用return是爲那些誰後閱讀代碼更清晰,更簡單。

2

返回一個簡單的值就像是一個組裝指令(即MOV eax,xxxx),傳遞一個參數會帶來更多的開銷。在任何情況下你都不應該擔心,差別很難被注意到。 另一個重要的問題是,在左邊的功能returniong通常在設計長期吸塵器,當優選的可能。

3

對於POD,沒有或幾乎沒有差異,我會總是去與返回值,因爲我覺得那些更清潔,更容易閱讀。

對於非POD,答案是「它取決於」 - 很多編譯器在這種情況下使用Return Value Optimization,這往往會創建一個隱式參考參數。

但是,除非您測量了 - 不是「知道」,而是實際使用探查器測量的結果 - 使用返回值返回函數的結果實際上是軟件中的瓶頸,請閱讀更易讀的版本。