如何检查返回值优化是否发生?

Ari*_*Ari 6 c++ gcc g++

考虑这个函数:

std::string 
myClass::myFunction2() {
  std::string result = myClass::myFunction1();
  return result;
}
Run Code Online (Sandbox Code Playgroud)

我希望编译执行返回值优化。我怎样才能确保这确实发生了,并且代码不会重复复制结果?

ali*_*nia 4

如果可能的话,始终应用RVO 。对于您的情况,假设 myFunction1() 不会根据执行路径返回不同的命名对象,则编译器应执行 RVO。如果它返回具有不同执行路径的不同命名对象,则编译器无法执行优化。

我建议你自己做实验:

要在各处禁用优化,请使用pragmas

#pragma GCC push_options
#pragma GCC optimize (ARG)

//your code

#pragma GCC pop_options
Run Code Online (Sandbox Code Playgroud)

要禁用特定函数的优化,请使用 __attribute__(())

void __attribute__((optimize(ARG))) foo(unsigned char data) {
    // your code
}
Run Code Online (Sandbox Code Playgroud)

ARG可以是数字(即优化级别)或以 0 开头的字符串(即优化选项)等。根据您的需要,您可以用“O0”替换 ARG 然后使用gcc -S运行两个版本的代码看看差异。我建议您阅读 gcc 4.4 或更高版本的文档。