C++ 有什么方法可以使程序 运行 更快?
C++ Is there any way to make a program run faster?
例如..如果我有。
#include <iostream>
using namespace std;
int main()
{
int counter = 0;
while (true)
{
cout << counter << endl;
counter++
}
}
假设我正在和其他计算机进行数到 10 亿的竞赛,这个循环的速度 运行 是否完全取决于计算机处理器的速度?还是我的程序的速度有限制 运行,这可以改变?
去掉 endl
,改用 "\n"
。计划至少将速度提高 4 倍。
将输出写入文件而不是屏幕。这对于再提高 10 倍的速度应该是有好处的(或者如果你使用 SSD,则更多)。
您发布的程序运行缓慢是因为将内部表示格式化为人类可读的形式(文本表示)并输出文本表示。
一个没有提到的优化是缓冲你的格式化输出,然后输出它。例如,将格式化文本写入缓冲区,然后每 100 次左右计数,使用块写入打印出缓冲区。 objective是为了减少输出交易的数量,让每笔交易的数据量更大。基本上,一个 1024 个字符的输出比 1024 个 1 个字符的输出要快。
输出取决于 OS 和其他程序无法控制的因素。您的程序将数据发送到 OS 并等待 OS 完成请求。完成时间取决于任务优先级和资源可用性(至少)。因此,如果您的程序可以以毫秒计算,但 I/O 需要几秒钟,那么您的运气不佳,因为没有程序优化会有所帮助。
使用 <cstdio>
中的 printf
,它比 cout
快一点。
printf("%d\n", counter);
如果您正在使用 cout
但未使用库 <cstdio>
中的任何内容,您可以在 int main()
函数的开头编写:
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
例如..如果我有。
#include <iostream>
using namespace std;
int main()
{
int counter = 0;
while (true)
{
cout << counter << endl;
counter++
}
}
假设我正在和其他计算机进行数到 10 亿的竞赛,这个循环的速度 运行 是否完全取决于计算机处理器的速度?还是我的程序的速度有限制 运行,这可以改变?
去掉 endl
,改用 "\n"
。计划至少将速度提高 4 倍。
将输出写入文件而不是屏幕。这对于再提高 10 倍的速度应该是有好处的(或者如果你使用 SSD,则更多)。
您发布的程序运行缓慢是因为将内部表示格式化为人类可读的形式(文本表示)并输出文本表示。
一个没有提到的优化是缓冲你的格式化输出,然后输出它。例如,将格式化文本写入缓冲区,然后每 100 次左右计数,使用块写入打印出缓冲区。 objective是为了减少输出交易的数量,让每笔交易的数据量更大。基本上,一个 1024 个字符的输出比 1024 个 1 个字符的输出要快。
输出取决于 OS 和其他程序无法控制的因素。您的程序将数据发送到 OS 并等待 OS 完成请求。完成时间取决于任务优先级和资源可用性(至少)。因此,如果您的程序可以以毫秒计算,但 I/O 需要几秒钟,那么您的运气不佳,因为没有程序优化会有所帮助。
使用 <cstdio>
中的 printf
,它比 cout
快一点。
printf("%d\n", counter);
如果您正在使用 cout
但未使用库 <cstdio>
中的任何内容,您可以在 int main()
函数的开头编写:
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);