Dom*_*WTF 2 c++ cpu performance
这个程序没有使用所有的CPU功率.我期待它能够接管cpu并尽可能快地运行代码,但它最多只能使用10个
#include <iostream>
using namespace std;
int main(void) {
unsigned long long x = 600851475143;
unsigned long long i = x-1;
while(i <= x) {
cout << "\r";
cout << i;
if((x % i) == 0) {
cout << "\n\n";
cout << i;
break;
}
i--;
}
system("pause");
}
Run Code Online (Sandbox Code Playgroud)
它最多只能达到10%
速度可能受输出设备速度的限制.如果将输出通过管道传输到磁盘上的文件,则会受到磁盘速度的限制.如果您只是写入控制台,它将受到控制台速度的限制.无论哪种方式,CPU很少会成为极限.
编辑:因为有些人显然不太了解代码,也许最好简化一下.让我们通过省略if语句来简化循环,只留下:
unsigned long long x = 600851475143;
unsigned long long i = x-1;
while(i <= x) {
cout << "\r";
cout << i;
i--;
}
Run Code Online (Sandbox Code Playgroud)
所以,这样做是从600851475143数字开始,倒数到0,然后在i环绕时停止std::numeric_limits<unsigned long long>::max()(通常为2 64 -1).
现在,如果我们重新添加if语句,我们通常可以忽略它控制的主体,但我们也会在每次迭代时都进行余数运算.如果没有这个,CPU的使用率几乎肯定会大大降低(尽管确切的数字可能很大程度上取决于硬件 - 例如,如果将输出写入磁盘,磁盘的持续带宽将成为控制因素).