c++ - 代码被编译器窃取,如何规避其犯罪途径

标签 c++ multithreading compiler-construction for-loop compiler-optimization

我想在工作中对新电脑的处理器施加压力。我认为一个好方法是为每个处理器打开一个线程,函数如下:

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/

相关文章:

c++ - Qt 关闭上一个窗口

c++ - 将 BloombergLP::blpapi::Name 转换为 const char *

java - 奇怪的并发行为

java - 如何处理多个扫描器(多个资源)的多个线程?

php - zend 引擎如何编译 php 代码或 php 编译器如何工作?

algorithm - LL 和 LR 解析有什么区别?

c++ - 问题覆盖绘制曲线的 c++ 类

java - java多线程中面临的问题

java - 编译在另一个 java 代码中的字符串中可用的 java 代码

c++ - g++ 不喜欢模板 var 上的模板方法链接?