C++,MinGW,Windows:使用std::cout输出数字非常慢

11 浏览
0 Comments

C++,MinGW,Windows:使用std::cout输出数字非常慢

我刚买了一台新的笔记本电脑,在安装了MinGW之后,简单程序的执行时间非常糟糕。下面是我写的一个简单的for循环。

#include 
using namespace std;
int main()
{
    for(int i=0;i<10000;i++)
    {
        cout<

在我运行Windows系统的Ryzen 9 4000 CPU的笔记本电脑上,它花了18.9秒来执行。我尝试过不同的集成开发环境和重新安装MinGW,但问题依然存在。

有什么办法可以让它运行得更快吗?

0
0 Comments

C++中使用std::cout打印数字非常慢的问题。这个问题的出现原因是因为默认情况下,C++标准库的输入输出流与C标准库的输入输出流是同步的,而C标准库的输入输出函数通常比C++标准库的输入输出流快。另外,std::endl会刷新流,这也会导致性能下降。解决方法是使用std::ios_base::sync_with_stdio(false)来取消输入输出流的同步,并使用'\n'代替std::endl。此外,还可以在编译时使用-Og(用于调试的优化)或-O3(全优化)来提高性能。

对于使用MinGW的GCC或clang编译器,可以应用以下建议:

1. 使用std::ios_base::sync_with_stdio(false)取消输入输出流的同步。

2. 使用'\n'代替std::endl。

3. 在调用编译器时启用-Og或-O3优化选项。

示例代码如下:

#include 
int main()
{
    std::ios_base::sync_with_stdio(false);
    for(int i = 0; i < 10000; ++i) {
        std::cout << i << '\n';
    }
    return 0;
}

对于MSVC编译器,可以使用setvbuf函数将输出流设置为行缓冲,以提高性能。示例代码如下:

setvbuf(stdout, 0, _IOLBF, 4096);

需要注意的是,在Windows系统上,使用std::endl和'\n'在性能上没有区别。

总之,通过取消输入输出流的同步、使用'\n'代替std::endl以及启用优化选项可以显著提高使用std::cout打印数字的性能。

0