C++ 有没有办法让程序运行得更快?

问题描述 投票:0回答:5

例如..如果我有。

#include <iostream>
using namespace std;

int main()
{
   int counter = 0;
   while (true)
   {
      cout << counter << endl;
      counter++
   }
}

假设我正在和其他计算机进行数到 10 亿的竞赛,这个循环运行的速度是否完全取决于计算机处理器的速度?或者我的程序运行速度是否有限制,这可能是可以改变的?

c++ performance loops iostream
5个回答
12
投票

摆脱

endl
并使用
"\n"
代替。计划至少将速度提高 4 倍。

将输出写入文件而不是屏幕。这对于再提高 10 倍的速度应该是有好处的(如果您使用 SSD,则更多)。


2
投票

使用

printf
中的
<cstdio>
,它比
cout
快一点。

printf("%d\n", counter);

2
投票

如果你正在使用

cout
但没有使用库中的任何东西
<cstdio>
,你可以在
int main()
函数的开头写这个:

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

0
投票

您发布的程序的缓慢来自将内部表示格式化为人类可读的形式(文本表示)并输出文本表示。

一个没有提到的优化是缓冲你的格式化输出,然后输出它。例如,将格式化文本写入缓冲区,然后每 100 次左右计数,使用块写入打印出缓冲区。目的是减少输出交易的数量,并使每笔交易都有更大的数据量。基本上,一个 1024 个字符的输出比 1024 个 1 个字符的输出要快。

输出取决于操作系统和其他程序无法控制的因素。您的程序将数据发送到操作系统以供输出,并等待操作系统完成请求。完成时间取决于任务优先级和资源可用性(至少)。因此,如果您的程序可以以毫秒计算,但 I/O 需要几秒钟,那么您的运气不佳,因为没有程序优化会有所帮助。


0
投票

您可以通过以下几个步骤轻松地使此代码快 10 倍:-

#1。不要使用

#include <iostream>
库,而是使用
#include <cstdio>
。它有很多复杂的东西会让你的代码变慢。

#2。始终在您的 main 函数中添加 void 参数,因为许多编译器会自动假定它

int main(int argc, char *argv[])
因此您的程序将假定并准备好从用户那里获取参数,从而使您的程序变慢。

#3。编译时确保在 gcc 或 clang 中添加

-O3
标志。示例:
gcc main.c -o main.o -O3
.

这就是我推荐的一切!

© www.soinside.com 2019 - 2024. All rights reserved.