我想在工作中对新电脑的处理器施加压力。我认为一个好方法是为每个处理器打开一个线程,函数如下:
void soStressful() {
int j = 0;
for (int i = 0; i < 10000; ++i) {
j += i;
}
}
但由于某种原因,编译器将这段代码拿走了。 (因为无论计算的复杂程度或 i 的大小,程序都会立即运行)并且我们也记录了非常少的 cpu 使用情况。
如何停止编译器编译出这段代码?
最佳答案
您的函数不接受任何输入,也不提供任何输出。所以编译器很容易发现它什么都不做。
我建议在循环中修改一个全局变量,最好声明为 volatile。那么编译器就无法假定它没有被使用。
此外,如果处理器速度很快,您将需要超过 10000 次迭代循环才能获得任何有意义的 CPU 使用率。
您可能想查看一些基准测试代码 - dhrystone 就是其中之一。
关于c++ - 代码被编译器窃取,如何规避其犯罪途径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14805048/