c++ 不优化从谷歌基准与挥发性关键字优化了

mzaanser  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(85)

这是我的基准代码示例:
有两种方法:

volatile result = compute();

字符串
第二种方法:

bool result = compute();
DoNotOptimize(result);


所以我想防止编译器删除compute(),那么哪一个更好呢?两者真的有相同的效果吗?

vatpfxk5

vatpfxk51#

你应该使用DoNotOptimize。下面是volatile不阻止变量优化的例子:https://quick-bench.com/q/tvsxD71u3d_PLgA9IKx7jwA6CLs的数据。
该应用程序是单线程的。编译器知道volatile std::string created_string永远不会被读取。
DoNotOptimize强制具体化std::string created_string,并向编译器承诺以后使用该变量。详情请看这个完美的答案:https://stackoverflow.com/a/69288151/6752050的。

相关问题