我提出的问题非常简单。让我们说我想读取一个大文件(6GB),而不会让堆耗尽内存。我该怎么做(我主要问的是,是否有一种方法可以读取文件的一部分,清除缓冲区并读取文件的下一部分)
答案 0 :(得分:1)
内存容量和可用性取决于平台和操作系统。
某些操作系统允许内存映射一个文件,操作系统在其中管理将数据读入内存。
使用块读取(c中的a.k.a. fread
和C ++中的istream::read
)可以完成无溢出读取。您告诉输入函数在块中读取多少,函数返回实际读取的数量。块大小应小于或等于为数据分配的内存。下一次读取将启动文件中的下一个位置。循环执行以读入所有数据。
此外,验证是否有理由同时将所有数据保存在内存中。大多数程序仅在有限的时间内保留一小部分数据。