代码被编译器窃取,我该如何规避它的犯罪途径
Code stolen by the compiler, how do I circumvent its criminal ways
我想在一台正在工作的新计算机上强调处理器。我想一个很好的方法是为每个处理器打开一个线程,函数为:
void soStressful() {
int j = 0;
for (int i = 0; i < 10000; ++i) {
j += i;
}
}
但由于某种原因,编译器会带走这些代码。(因为无论计算的复杂性或i的大小如何,程序都会立即运行)而且我们记录的cpu使用量也很少。
如何停止编译器编译此代码
您的函数不接受任何输入,也不提供任何输出。所以编译器很容易就发现它什么都不做。
我建议在循环中修改一个全局变量,最好声明为volatile。那么编译器将不能假定它没有被使用。
此外,如果处理器很快,则需要超过10000次迭代循环才能获得任何有意义的CPU使用率。
您可能想看看一些基准测试代码——dhrystone就是其中之一。
只需从函数中返回j
,并在调用方中对其进行处理。但这是一种给处理器带来压力的糟糕方式,因为它只加载处理器的非常有限的子集。根据你想要加载处理器的原因(你想确保它正常工作吗?你想尽可能多地加热它吗?)你应该选择一个专门为你想做的事情而设计的程序。Prime95是一种常见的。
尝试在变量上使用"volatile"关键字。当然,这是忽略了这样一个事实,即你需要做更多的事情来给你的电脑带来压力。你可能会发现这个答案很有用,尽管我会非常认真地对待代码中的警告。
如果真的想强调处理器:
tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(0.5d))))))))))))))))))))));
添加更多级别,并将其放入循环中。
这是多年前PDP-11的浸泡试验。
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Python中的for循环与C++有何不同
- 在C++中释放内存期间,迭代器与指针有何不同
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 类中的 C++ int 被设置为值,似乎不知从何而来
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 收益率和回报有何不同?
- 覆盖私有功能,它与受保护功能有何不同?
- 擦除删除成语的性能增益从何而来
- 无论代码长度如何,以下代码的内存要求有何不同?
- "virtual"对C++析构函数有何影响?
- 如果我对"while"块发表评论,为什么程序会死机?其中的"yield"线有何影响?
- 系统时间从何而来?
- stl::unordered_map 和 stl::vector 的销毁有何不同
- C++ 友元函数在内存位置上有何不同?
- 为什么我可以在不链接任何额外库的情况下包含 sys/*.h
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- std::u8string与std::string有何不同?
- 功能和变量从何而来
- 代码被编译器窃取,我该如何规避它的犯罪途径