Re: [問題] vector複製時間消耗

看板C_and_CPP作者時間12年前 (2013/02/16 11:05), 編輯推噓1(108)
留言9則, 3人參與, 最新討論串3/3 (看更多)
剛剛試了一下 用cygwin的 g++ -std=c++0x 在有RVO的情況下 我發現回傳時加move反而慢 有RVO的情況下回傳值完全不需要copy或move 但如果明確寫了move就會需要1次move跟1次dtor 這是正常的嗎 總覺得是哪裡搞錯了 @@ 還是說這些只要開了最佳化就都沒差了? ※ 引述《loveme00835 (高髮箍)》之銘言: : ※ 引述《suhorng ( )》之銘言: : : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : : 平台可能是 mingw32 或 (32||64) 位元的 Ubuntu : : G++ >= 4.6.2, with -std=c++0x (-std=c++11) flags on : : 問題(Question): : : 想請問一下, 我的程式中有如下片段 : : vector<my_type> result; : : if (condition) : : result = function1(); : : else : : result = function2(); : : 而 function1, function2 的 prototype 皆為 : : vector<my_type> functionX(); : : 那麼我需要擔心那兩行賦值所花的時間嗎? : : 還是其實並不會有複製的動作? : : 另外請問有沒有推薦關於 C++ 這方面規定/G++現有的實做方面的資料呢? : : 之前想測試這類 return (by value, by ref) 以及宣告新變數時會呼叫 operator=, : : copy constructor, 或是普通的建構子, 可是結果跟我胡亂猜測的差很多.. : : 另外, 假如我在函式的參數中用 call by value, 那標準函式庫中的容器(特別是vector) : : 有可能自己優化掉改用 R-value reference (若我剛好傳給他的是 R-value)嗎? : : 麻煩各位大大解惑了, 謝謝! <(_ _)> : functionX().swap( result ); : 以上是在沒有 C++1x 支援下的常見寫法. : 即使在有 C++1x 的支援下, 要確保 move 語意, 還要注意任何 : 擁有權轉移的地方, 此例為兩個: : (1) return local object from function : (2) assigned by return value -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.248.72.119

02/16 21:16, , 1F
前提是要能夠做 RVO, wiki 的例子 http://ppt.cc/IOrL
02/16 21:16, 1F

02/16 21:18, , 2F
這時候就是要把資源所有權轉給暫時物件了, RVO要看編
02/16 21:18, 2F

02/16 21:19, , 3F
譯器支援, 雖然大部分有做但是不該都仰賴優化
02/16 21:19, 3F

02/16 21:33, , 4F
我同意不該都仰賴優化
02/16 21:33, 4F

02/16 21:33, , 5F
但為了不仰賴RVO 反而阻礙了RVO導致變慢 這感覺很怪
02/16 21:33, 5F

02/16 21:55, , 6F
變不變慢是測了才知道的事情, 我的是司不是要你都那樣
02/16 21:55, 6F

02/16 21:56, , 7F
寫, 原文就有寫的事情
02/16 21:56, 7F

02/16 23:17, , 8F
這個問題我再想想 你上一篇的說明很有幫助 感謝
02/16 23:17, 8F

02/17 14:07, , 9F
有瓶頸時再來針對編譯器寫最快的 code 比較實際
02/17 14:07, 9F
文章代碼(AID): #1H7sW4St (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1H7sW4St (C_and_CPP)