微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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.的更多信息

原文地址:https://www.jb51.cc/c/118801.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐