我有一个大的文本文件要打开(例如-5GB大小)。但由于RAM有限(占用1GB),我如何在没有任何内存错误的情况下打开和读取文件?我在安装了基本软件包的linux终端上运行。
这是一个面试问题,因此请不要考虑实用性。
我不知道是从系统级别还是程序级别来看待它。。。如果有人能对这个问题有所了解,那就太好了。
谢谢。
逐字符读取。。。或X字节乘X字节。。。这真的取决于你想用它做什么……只要你不需要一次处理整个文件,那就行了。
(椭圆非常棒)
他们希望您如何处理该文件?你在找什么吗?提取什么?排序?这将影响你的方法。
如果你正在寻找一些东西,逐行或逐个字符地读取文件可能就足够了。如果你需要在文件中跳转或分析它的部分,那么很可能需要对其进行内存映射。查找mmap()。这里有一篇关于这个主题的短文:内存映射的i/o
[仅注释]如果您要使用系统调用(open()和read()),那么逐个字符地读取将生成大量系统调用,从而严重降低应用程序的速度。即使存在缓冲区缓存(或磁盘文件),系统调用也是昂贵的。
如果块大小"应该"大于1MB,最好逐块读取。在1MB块大小的情况下,您将发出5*1024个系统调用。