相关疑难解决方法(0)

std :: fstream缓冲与手动缓冲(为什么10倍增益与手动缓冲)?

我测试了两种写入配置:

1)Fstream缓冲:

// Initialization
const unsigned int length = 8192;
char buffer[length];
std::ofstream stream;
stream.rdbuf()->pubsetbuf(buffer, length);
stream.open("test.dat", std::ios::binary | std::ios::trunc)

// To write I use :
stream.write(reinterpret_cast<char*>(&x), sizeof(x));
Run Code Online (Sandbox Code Playgroud)

2)手动缓冲:

// Initialization
const unsigned int length = 8192;
char buffer[length];
std::ofstream stream("test.dat", std::ios::binary | std::ios::trunc);

// Then I put manually the data in the buffer

// To write I use :
stream.write(buffer, length);
Run Code Online (Sandbox Code Playgroud)

我期待同样的结果......

但是我的手动缓冲可以将性能提高10倍来写入100MB的文件,并且与正常情况相比,fstream缓冲不会改变任何东西(不重新定义缓冲区).

有人对这种情况有解释吗?

编辑:这是新闻:刚刚在超级计算机上完成的基准测试(Linux 64位架构,持续英特尔至强8核,Lustre文件系统和...希望配置良好的编译器) 基准 (我没有解释1kB手动缓冲器"共振"的原因......)

编辑2:在1024 B的共振(如果有人对此有所了解,我很感兴趣): 在此输入图像描述

c++ buffer fstream file c++11

55
推荐指数
2
解决办法
2万
查看次数

与boost.asio和文件i/o有什么关系?

我注意到boost.asio有很多涉及套接字,串行端口和各种非文件示例的例子.对于我来说,Google并没有真正提到过很多,因为asio是一个很好或有效的异步文件i/o方法.

我有大量的数据我想异步写入磁盘.这可以通过Windows(我的平台)中的原生重叠io来完成,但我更喜欢拥有独立于平台的解决方案.

我好奇,如果

  1. boost.asio有任何文件支持
  2. boost.asio文件支持已经足够成熟,适用于日常文件i/o
  3. 是否会添加文件支持?这是什么前景?

c++ file-io boost boost-asio

45
推荐指数
5
解决办法
2万
查看次数

标签 统计

c++ ×2

boost ×1

boost-asio ×1

buffer ×1

c++11 ×1

file ×1

file-io ×1

fstream ×1