Marginalman 板


LINE

他們是什麼? Copy Elision 和 Return Value Optimization(RVO)是編譯器的最佳化技術, 它們的目標是減少不必要的物件建構和拷貝,以提升程式效能。 Copy Elision Copy Elision 是C++標準允許的最佳化手段, 避免了多次呼叫拷貝建構函式(或移動建構式)。 有些情況下編譯器甚至會跳過呼叫任何建構式, 而是直接在目標位置上建構物件。 RVO (Return value optimization) RVO 是Copy Elision的一個特例。 當函式回傳 Local 物件時, RVO 允許直接在呼叫者的記憶體空間建構物件, 而不是先在函式內建構,然後再拷貝到呼叫者。 原因 C++ 裡面一個物件都會有以下成員: 建構式 (Constructor) 複製建構式 (Copy Constructor) 移動建構式 (Move Constructor) 解構式 (Destructor) 沒有RVO的情況,可能在回傳物件的過程會呼叫非常多次的各種建構式解構式, 造成資源的浪費。 Code: #include <iostream> class A { public: A() { std::cout << "Constructor\n"; } A(const A&) { std::cout << "Copy Constructor\n"; } A(A&&) { std::cout << "Move Constructor\n"; } ~A() { std::cout << "Destructor\n"; } }; A func() { A a; // 在此地建構物件a return a; // 觸發RVO,直接將a建構在呼叫者的記憶體中 } int main() { A b = func(); // 若RVO啟用,不會有多餘的拷貝或移動操作 return 0; } 若啟用了RVO: Constructor Destructor 若RVO被關閉: Constructor Copy Constructor (或 Move Constructor) Destructor Destructor 而在Modern C++,自C++17起,RVO變得強制性(Mandatory RVO), 編譯器在大部分情況下必須強制進行RVO。 但RVO,真的好嗎? 我在這邊引用一段話CSDN看到的結論: 尽管C++11以上标准提出“复制省略(copy elision)”优化策略,并且GCC等主流编译器均 支持该优化,但我强烈不建议使用该技术。 我们在使用C++语言时,必须牢记,返回值必须是int、bool、枚举或指针等轻量级原生 (lightweight primitive)数据类型。 如果确实需要返回大型数据,请使用引用或指针作为输出参数返回,而不是通过return语 句返回。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.48.170 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Marginalman/M.1730197166.A.B21.html
1F:推 DJYOMIYAHINA: 剩我都直接return整坨了 10/29 18:22
2F:推 CCapocalypse: 大師 10/29 18:22
3F:推 nh60211as: 大師 10/29 18:24
4F:→ nh60211as: 但我强烈不建议使用该技术 => 為啥啊 10/29 18:25
5F:→ yam276: 因為這用法很高階語言 不夠輕量 通常大的struct都用heap傳 10/29 18:26
6F:推 ILoveErr: 大師 10/29 18:26
7F:→ yam276: 像是你new或make_shared之後把指標傳出去 10/29 18:26
8F:→ yam276: 那等於你只是給了鑰匙給別人而不是整個房間丟出去 10/29 18:27
9F:推 sustainer123: 大師 10/29 18:35
10F:推 SecondRun: 大師 10/29 18:44
11F:推 deatheo: 大師 10/29 20:39







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP