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

前端之家收集整理的这篇文章主要介绍了在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&C++相关文章