RVO (Return Value Optimization)
介紹
RVO 和 NRVO(Named Return Value Optimization)是 C++ 中的一項編譯器優化技術, 可以減少 Temporary Object 的產生和 Copy 的呼叫, 使用這像優化技術後物件的記憶體位置可能會直接建立在原本要回傳的記憶體位置, 因此物件記憶體位置可能不在現有的 Stack Frame 範圍內, 而在別人的 Stack 上。
以效能來來說, 套用 RVO/NRVO 技術的狀況會比採用 Move Constructor 來的快, Move Constructor 又比 Copy Constructor 來的快。
RVO/NRVO > Move > Copy
範例在: examples/rvo.cpp
注意事項
如果要用到 RVO/NRVO 的話,回傳值不要自己加
std::move
,不然會套用到 Move Semantics
參考
- cppreference - copy elision
Optimizes out copy- and move-constructors, resulting in zero-copy pass-by-value semantics
當 local variable 建立時,其實是直接建立在原先 return value 會被 copy 或 move 到的地方,如此一來就不會有額外的 copy 或 move 操作