我有一个要打开的大文本文件(例如 - 5GB大小)。但是有限的RAM(占用1 GB),如何在没有任何内存错误的情况下打开和读取文件?我在安装了基本软件包的linux终端上运行。
这是一个面试问题,因此请不要考虑实用性。
我不知道是在系统级别还是程序级别来看待它......如果有人能够对这个问题有所了解,那将会很棒。
感谢。
答案 0 :(得分:5)
逐个字符地读取它......或者用X字节读取X个字节......这实际上取决于你想要用它做什么...只要你不需要一次完整的文件,那就行了。
(省略号很棒)
答案 1 :(得分:1)
他们希望您对该文件做什么?你在找什么吗?提取一些东西?排序?这会影响你的方法。
如果您正在寻找某些内容,则可以逐行或逐个字符地读取文件。如果你需要跳过文件或分析它的部分,那么很可能想要记忆映射它。查找 mmap()。这是关于这个主题的简短文章:memory mapped i/o
答案 2 :(得分:1)
[只是评论] 如果要使用系统调用(open()和read()),那么逐个字符地读取将产生大量系统调用,这会严重降低应用程序的速度。即使存在缓冲区缓存(或磁盘文件),系统调用也很昂贵。
最好逐块读取块大小“应该”大于1MB。如果块大小为1MB,您将发出5 * 1024个系统调用。