[討論] call by reference 的效率?

看板C_and_CPP作者 (阿畢斯)時間11年前 (2013/10/13 02:33), 編輯推噓6(6018)
留言24則, 10人參與, 最新討論串1/1
http://codepad.org/aZicPdhj 以上是小弟寫的一個測試程式 我寫了兩個 function 分別有 call by value 和 call by reference 的版本 計算各 function 所花費之 clocks 以 std::string 來說.. call by reference 比較快完全是在理想中的事 但以 built-in 型別 int 來說.. 為什麼 call by value 會比 call by reference 還快 雖然這 4 個 function 條件不完全一樣,似乎不能這樣比 但是小弟還是想請問一下 會有可能是因為遞迴的關係,其中 compiler 做了什麼特別的事情? 又或者是我觀念上有誤呢? 想請問各位高手,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.72.76

10/13 10:44, , 1F
call by reference 感覺跟 call by pointer 差不多 XD
10/13 10:44, 1F

10/13 10:45, , 2F
我覺得是測速誤差,你用比較準的測速法重測一次
10/13 10:45, 2F

10/13 10:46, , 3F
Linux用clock_gettime,Windows用QueryPerformanceCounter
10/13 10:46, 3F

10/13 10:47, , 4F
各測速方法評比可以參考這一篇 #1IGT3gmB (C_and_CPP)
10/13 10:47, 4F

10/13 10:59, , 5F
ㄟ... 我剛剛用clock_gettime測過,跟你測的結果一樣...
10/13 10:59, 5F

10/13 11:02, , 6F
因為小弟在自己電腦用把 MAX_SIZE 調高,差距更明顯,所以
10/13 11:02, 6F

10/13 11:02, , 7F
想請問各位大神... 囧,但謝謝S大提供的方法,下午試試看
10/13 11:02, 7F

10/13 11:30, , 8F
似乎應該試試非遞迴的函數。
10/13 11:30, 8F

10/13 11:52, , 9F
就自己的淺見來看,在多數系統上 int 和 pointer 處理速度
10/13 11:52, 9F

10/13 11:53, , 10F
應該差不多,而 call by ref 其實就等於 call by ptr
10/13 11:53, 10F

10/13 11:54, , 11F
比起直接傳 int 的方式多了一個 deref 的步驟
10/13 11:54, 11F

10/13 12:00, , 12F
基本型別的 call by ref 若做成 inline 有可能會更快..
10/13 12:00, 12F

10/13 12:01, , 13F
不過也要看情況,像是遞迴函數就沒辦法用 inline 實現
10/13 12:01, 13F

10/13 12:39, , 14F
cache cache
10/13 12:39, 14F

10/13 15:22, , 15F
在x64上面會差更多,因為參數可以塞register
10/13 15:22, 15F

10/13 15:23, , 16F
call by value的話就是register的值直接拿來用
10/13 15:23, 16F

10/13 16:11, , 17F
int 比較快如同樓上所說是可以理解的
10/13 16:11, 17F

10/13 17:44, , 18F
長知識了~ 謝謝各位大神! 所以當傳遞的 object 越肥大的
10/13 17:44, 18F

10/13 17:45, , 19F
時候,call by ref 的優勢才漸漸的明顯出來
10/13 17:45, 19F

10/13 18:01, , 20F
好像該比看看call by reference是怎麼實作的XD
10/13 18:01, 20F

10/13 20:55, , 21F
call by reference 在某些情況也會影響 optimization
10/13 20:55, 21F

10/13 20:58, , 22F
不過這取決於 code 怎麼寫跟 compiler 的實作
10/13 20:58, 22F

10/13 21:45, , 23F
我記得只有第一個參數是放register,其他參數是push到
10/13 21:45, 23F

10/13 21:47, , 24F
stack,不過即使如此兩者相比還是省了一次dereference
10/13 21:47, 24F
文章代碼(AID): #1IMWQ1Mt (C_and_CPP)