例如..如果我有。
#include <iostream>
using namespace std;
int main()
{
int counter = 0;
while (true)
{
cout << counter << endl;
counter++
}
}
并且说我在与其他计算机相比计算到10亿的竞争,这个循环的运行速率纯粹取决于计算机处理器的速度吗?或者我的程序运行速度有限制,这可以改变吗?
答案 0 :(得分:9)
取消endl
并改用"\n"
。计划至少比单独加速4倍。
将输出写入文件而不是屏幕。这对于另外10倍的速度提升应该是好的(或者更好 - 如果使用SSD则更多)。
答案 1 :(得分:1)
使用printf
中的<cstdio>
,它比cout
快一点。
printf("%d\n", counter);
答案 2 :(得分:0)
您发布的程序的缓慢来自将内部表示格式化为人类可读形式(文本表示)并输出文本表示。
未提及的一个优化是缓冲格式化的输出,然后输出它。例如,将格式化文本写入缓冲区,然后每100个左右计数,使用块写入打印出缓冲区。目标是减少输出事务的数量并使每个事务具有更大量的数据。基本上,1024个字符的一个输出将比1个字符的1024个输出快。
输出取决于操作系统和超出程序控制范围的其他因素。您的程序将数据发送到OS,然后等待操作系统完成请求。完成时间取决于任务优先级和资源可用性(至少)。因此,如果您的程序可以在几毫秒内计算,但I / O需要几秒钟,那么您运气不好,因为没有程序优化会有所帮助。
答案 3 :(得分:0)
如果您使用的是cout
,但没有使用库<cstdio>
中的任何内容,则可以在int main()
函数的开头编写该代码:
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
答案 4 :(得分:0)
预增量更快(++计数器而不是计数器++)