File 如何使用有限的RAM在UNIX/LINUX中读取大文件?

File 如何使用有限的RAM在UNIX/LINUX中读取大文件?,file,unix,ram,File,Unix,Ram,我有一个大的文本文件要打开(例如-5GB大小)。但是,由于RAM有限(需要1GB),如何打开并读取文件而不出现任何内存错误?我在安装了基本软件包的linux终端上运行 这是一个面试问题,因此请不要考虑实际情况 我不知道是从系统层面还是程序层面来看待它。。。如果有人能对这个问题有所了解,那就太好了 谢谢。逐字阅读。。。或者X字节乘以X字节。。。这真的取决于你想用它做什么。。。只要您不需要同时使用整个文件,就可以了 (省略号太棒了)他们想让你用这个文件做什么?你在找什么吗?提取什么?分类?这会影响你

我有一个大的文本文件要打开(例如-5GB大小)。但是,由于RAM有限(需要1GB),如何打开并读取文件而不出现任何内存错误?我在安装了基本软件包的linux终端上运行

这是一个面试问题,因此请不要考虑实际情况

我不知道是从系统层面还是程序层面来看待它。。。如果有人能对这个问题有所了解,那就太好了


谢谢。

逐字阅读。。。或者X字节乘以X字节。。。这真的取决于你想用它做什么。。。只要您不需要同时使用整个文件,就可以了


(省略号太棒了)

他们想让你用这个文件做什么?你在找什么吗?提取什么?分类?这会影响你的方法

如果您正在查找某些内容,则逐行或逐字符读取文件就足够了。如果您需要跳转文件或分析文件的各个部分,那么很可能需要对其进行内存映射。查找mmap()。这里有一篇关于这个主题的短文:

[只需评论] 如果要使用系统调用(open()和read()),那么逐字读取将生成大量系统调用,严重降低应用程序的速度。即使存在缓冲区缓存(或磁盘文件),系统调用也是昂贵的


如果块大小“应该”大于1MB,最好逐块读取。如果块大小为1MB,您将发出5*1024个系统调用

我会问他们为什么在文本文件中存储那么多信息来回答这个问题。请他们将其保存为二进制数据,并在完成后让他们回复您:)@Avada,在很多情况下,您会看到非常大的文本文件。例如,使用日志文件。如果你想转换成二进制格式,你无论如何都需要读取该文件…:)^日志文件似乎是一个完美的例子@bdonlan,呵呵,对于日志文件,我会给你一个很好的评价(即使当你真的需要挖掘日志文件时,没有什么比太大的日志文件更令人不安的了。日志应该轮换;)