【问题标题】:C/C++ file output buffering/buffer handover to the OSC/C++ 文件输出缓冲/缓冲区移交给操作系统
【发布时间】:2013-11-29 10:34:39
【问题描述】:

我正在维护一个单线程 C++ 应用程序,该应用程序必须不时编写一个大型二进制文件。 我想尽量减少花在 { stream(fname); 上的时间。 stream.write(largebuf}; },因此在写入/关闭流时尽快将数据交给操作系统(Linux)。 我并不真正关心何时数据实际上是物理写入磁盘的。

这很可能是一个操作系统调优问题(欢迎任何指点)——我想知道在 C++ 代码中是否有什么我可以做的事情,以从上面显示的块中缩短周转时间。

谢谢, T.

【问题讨论】:

标签: c++ ostream output-buffering


【解决方案1】:

如果构建 C++11 不是问题,您可以考虑使用 std::async

【讨论】:

    【解决方案2】:

    您不能使用线程有什么特别的原因吗?如果您不关心数据何时实际写入磁盘,您可以只使用线程,这样您就不会在写入那个大的 bin 文件时阻塞主线程。

    std::thread write_thread([&fname, &largebuf](){ stream(fname); stream.write(largebuf}; });
    

    PS:示例使用 C++11 特性(线程和 lambda 函数)。

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2011-11-14
      • 2016-01-17
      • 1970-01-01
      • 2016-01-21
      • 2013-03-18
      相关资源
      最近更新 更多