在C中,将大型二进制(1GB-4GB)文件加载到内存的最快方法是什么?

Linux 64位(例如Amazon EC2实例)上,我需要将几个大型二进制文件加载到内存中.什么是最快的方式?

> ifstream
>恐惧
> POSIX打开
> POSIX mmap(实际上并没有将整个文件加载到内存中,这会影响性能)
>别的什么?

此外,节点可能会或可能不会再次启动此可执行文件,因此如果文件在后续尝试中加载得更快,则会有所帮助.某种预加载步骤甚至可以起作用.

解决方法

时间将由磁盘I / O占主导地位,因此您使用的API并不像考虑磁盘的工作方式那么重要.如果您随机访问磁盘(旋转介质),则需要花费3到9毫秒的时间来寻找…一旦磁盘正在流式传输,它就可以维持大约128 MB /秒,这就是位从磁盘头上移出的速度. SATA链路或PCIe总线具有比这更高的带宽(600到2000 MB /秒). Linux在内存中有一个页面缓存,它在磁盘上保留一份页面副本,因此如果您的计算机有足够的RAM,后续尝试将很快,即使您随后随机访问数据也是如此.所以建议一次读取大块.如果你真的想加快初始加载,那么你可以使用mmap映射整个文件(1GB-4GB)并有一个帮助程序线程按顺序读取每个页面的第一个字节.

您可以阅读有关disk drive performance characteristics here.的更多信息

您可以阅读有关page cache here.的更多信息

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...