我可以以1 Gbps的速度写入硬盘吗
Can I write to hard disk at 1 Gbps?
我对磁盘速度感到有点惊讶。。我似乎能够在1秒内写入1GB的文件。
size_t s = 1*1024*1024;
char* c = new char[s];
FILE* fx = fopen("D:\test.mine", "wb");
//ensure(fx);
for(int i = 0; i < 1024; ++i)
{
fwrite(c,1,s,fx);
}
fclose(fx);
delete[] c;
我有点难以理解是什么原因造成的?我认为fclose确保了数据实际上写在硬盘上。。。?
用于写入文件的标准库函数只管理自己的内部缓冲区。在现代操作系统中对文件进行写入时,即使在fclose
之后,数据实际上也只是进入操作系统的缓冲区,这将延迟写入,直到它认为这是一个好时机。
确保数据写入磁盘的常用方法是发出特定于操作系统的调用,强制写入磁盘;在POSIX上是fsync
/sync
,在Windows上您需要FlushFileBuffers
。
fclose只刷新C库缓冲区,不刷新系统缓冲区。因此,您需要一个系统调用,如(f)sync。
fclose()还会清除流的缓冲区缓存,因此在调用fclose的那一刻,未读缓冲区的内容就会被擦除。
相关文章:
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 查找标准::hash_map与标准::矢量的速度
- 加快在C++中读取/处理日志文件的速度
- 为什么这些算法的运行速度比它们应该的要快?
- 如何提高文件的读取速度?
- 通过libpqxx提高PostgreSQL数据库的更新速度
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 如何加快大字符串的解析速度?
- 如何比较两个函数的速度和性能
- 线程相互减慢速度
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- 使用 Unity 构建加快C++构建速度,并减少标头依赖项
- 从 OpenCV 3 切换到 OpenCV 4 会导致网络摄像头以最大 5 fps 的速度录制,而不是通常的 30 f
- 我可以以1 Gbps的速度写入硬盘吗