这是我的基准代码示例:有两种方法:
volatile result = compute();
字符串第二种方法:
bool result = compute(); DoNotOptimize(result);
型所以我想防止编译器删除compute(),那么哪一个更好呢?两者真的有相同的效果吗?
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的。
DoNotOptimize
volatile
volatile std::string created_string
std::string created_string
1条答案
按热度按时间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的。