使用 MS 编译器的 std::cout 非常慢

2023-12-27

我正在打印多次计算迭代的进度,输出实际上是其中最慢的部分,但只有当我使用 Visual C++ 编译器时,MinGW 在同一系统上才能正常工作。

考虑以下代码:

#include <iostream>
#include <chrono>

using namespace std;
#define TO_SEC(Time) \
    chrono::duration_cast<chrono::duration<double> >(Time).count();
const int REPEATS = 100000;

int main() {
    auto start_time = chrono::steady_clock::now();

    for (int i = 1; i <= REPEATS; i++) 
        cout << '\r' << i << "/" << REPEATS;

    double run_time = TO_SEC(chrono::steady_clock::now() - start_time);
    cout << endl << run_time << "s" << endl;
}

现在,使用 MinGW(“g++ source.cpp -std==c++11”)编译时得到的输出是:

100000/100000 
0.428025s

现在,使用 Visual C++ 编译器 2013 年 11 月(“cl.exe source.cpp”)编译时得到的输出是:

100000/100000
133.991s

这是相当荒谬的。我想到的是 VC++ 正在进行不必要的刷新。

有人知道如何防止这种情况吗?

编辑:设置是:

gcc 版本 4.8.2 (GCC),目标 i686-pc-cygwin

适用于 x86 的 Microsoft (R) C/C++ 优化编译器版本 18.00.21005.1

Windows 7 Professional N 64 位,CPU i7-3630QM,2.4GHz,8.00GB RAM


std::cout在 MSVC 中很慢(https://web.archive.org/web/20170329163751/https://connect.microsoft.com/VisualStudio/feedback/details/642876/std-wcout-is-ten-times-slower-than-wprintf-performance- C 库中的错误 https://web.archive.org/web/20170329163751/https://connect.microsoft.com/VisualStudio/feedback/details/642876/std-wcout-is-ten-times-slower-than-wprintf-performance-bug-in-c-library).

这是我们的 C 和 C++ 标准库的不幸后果 设计了实现。问题是当打印到 控制台(而不是重定向到文件),我们的 C 默认情况下,C++ I/O 都不会被缓冲。这有时会被隐藏 事实上,C I/O 函数(如 printf() 和 puts() 暂时) 在工作时启用缓冲。

Microsoft 建议进行此修复(以在 cout/stdout 上启用缓冲):

setvbuf(stdout, 0, _IOLBF, 4096)

您还可以尝试:

cout.sync_with_stdio(false);

但可能不会有什么不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MS 编译器的 std::cout 非常慢 的相关文章

  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在

随机推荐

  • Oracle SQL 约束 where 子句

    我在 oracle 上有一个包含以下列的 Tester 表 TesterID 测试者姓名 是默认值 应用程序ID TesterID 是主键 现在我希望只能有一个默认测试器 这意味着只有一个测试器可以在 ApplicationID 处具有计算
  • GDB 中的断点命名

    有没有办法在 GDB 中命名一个断点 以便在断点被击中时 GDB 给出一些名称而不是数字 IE 在方法 main 中命中断点 非常重要的断点 不 没有办法做到这一点 但您可以使用 命令 命令和打印命令 e g break main comm
  • 如何使用变量名调用java方法?

    假设我有 Method1 void Method2 void 有没有办法我可以选择其中一个带有变量的方法 String MyVar 2 MethodMyVar 使用反射 Method method WhateverYourClassIs c
  • 如何根据单个用户定义的文字自动添加文字定义?

    C 11 offers 用户定义的文字 http en wikipedia org wiki C 2B 2B11 User defined literals 我刚刚开始使用它们 这让我想知道是否可以自动添加所有SI 乘数 http en w
  • Keras + DataFrameMapper + make_pipeline,input_dim 困境

    我的数据看起来像这样 import pandas as pd from sklearn pandas import DataFrameMapper CategoricalImputer from sklearn preprocessing
  • 法罗双重调度

    有人可以解释一下 Pharo 4 0 中使用 Smalltalk 进行双重调度的过程吗 我是 Smalltalk 的新手 很难掌握这个概念 因为与 Smalltalk 相比 它在 Java 中的实现方式非常不同 如果有人能用一个例子来解释它
  • 组合 XPATH 轴(前同级和后同级)

    假设我有以下 UL ul li barry li li bob li li carl li li dave li li roger li li steve li ul 我需要获取鲍勃和罗杰之间的所有 LI 我可以抓住鲍勃之后的一切 ul l
  • 编写一个函数来删除对象(如果存在)

    我正在尝试编写一个函数来删除对象 如果存在 原因是我想摆脱日志消息错误 未找到对象 arg 我尝试了以下方法 ifrm lt function arg if exists as character substitute arg rm arg
  • 为什么 pytorch 中的正则化和临时代码不匹配?pytorch 中的正则化公式是什么?

    我一直在尝试对 PyTorch 中的二元分类模型进行 L2 正则化 但是当我匹配 PyTorch 的结果和临时代码时 它不匹配 火炬代码 class LogisticRegression nn Module def init self n
  • 如何通过 Java 在 SQLite 中强制执行外键约束?

    默认情况下 SQLite 似乎不强制执行外键 我在用着sqlitejdbc v056 jar http www zentus com sqlitejdbc 我读过使用PRAGMA foreign keys ON 将打开外键约束 并且需要在每
  • 算法中的陌生符号:∀是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在阅读一个算法 这是一个基于A 的寻路算法 它包含一个我不熟悉的数学符号 这是上下文 v s g s mins pred s v s
  • import 不能在 chrome 61 中使用?

    我尝试在最新发布的 chrome 版本 即 chrome 61 中玩 ES6 功能 在使用过程中遇到了错误import关键词 从技术上来说 import使用以下方法 但控制台显示错误 import Mymodule from Mymodul
  • 自然连接的维恩图

    我一直在尝试完全理解 sql 连接的概念 维恩图在这方面帮助了我很多 我发现它们适用于所有类型的连接 但不适用于自然连接 自然连接的维恩图是什么样子的 维恩图对于理解自然连接或内连接没有太大帮助 大多数与 Stack Overflow 和网
  • 如何将数据作为 trie 存储在表中? (SQL 服务器)

    为了方便起见 该表包含英语词典中的所有单词 我想做的是将数据存储为特里树 这样我就可以遍历 trie 的不同分支并返回最相关的结果 首先 如何将表中的数据存储为 trie 结构 其次 如何遍历这棵树 如果有帮助的话 建议上一个问题 http
  • 如何在 Playframework2 中的 i18n 中使用单引号?

    在开发法语应用程序时 法语充满了单引号 我需要使用带有单引号和许多其他重音字符的 i18n 所以这是我的摘录messages fr FR file some key C est la vie 这是输出 Cest la vie 如何在消息中使
  • 为什么我的规范化路径带有前缀 \\?\

    我正在开发一个个人项目 试图通过规范化 Rust 中的相对路径来解决该项目 然而 每当我这样做时 新路径都会以一个奇怪的前缀 顺序 例如 简单的事情如下 let p fs canonicalize unwrap println p disp
  • SQL循环遍历所有表并获取特定列的最大值

    我正在尝试创建一个审核表来检查该表的加载日期 基本上 我想循环遍历数据库中的所有表并检查特定列 LoadedDate并返回每个表的该列的最大值 SELECT TABLE NAME INTO TableList FROM INFORMATIO
  • Android Facebook 对话框

    我已将 Facebook 集成到我的应用程序中 但是 它不是在对话框中显示 而是全屏打开 我想知道是否有人知道如何将其更改为对话框 Facebook 处理程序类 Override public void onCreate Bundle sa
  • 无法连接到总线:没有这样的文件或目录

    我创建了一个 docker 16 4 容器并尝试在容器内运行 docker 继这篇文章之后 https www digitalocean com community tutorials how to install and use dock
  • 使用 MS 编译器的 std::cout 非常慢

    我正在打印多次计算迭代的进度 输出实际上是其中最慢的部分 但只有当我使用 Visual C 编译器时 MinGW 在同一系统上才能正常工作 考虑以下代码 include