std::ofstream::open将整个文件读入内存

std::ofstream::open will it read the entire file into memory?

本文关键字:文件 内存 ofstream open std      更新时间:2023-10-16

为了释放内存,我正在将内存中的内容写入磁盘。

我想知道每次我调用open(),并在文件末尾添加新元素时,它会把整个文件读入内存吗?或者它只是指向文件末尾的指针?

如果使用ofstream::appios::appofstream::ateios::ate模式打开文件,fstream实现并没有具体指定会发生什么。

但在任何正常的实现中,文件都不会被读取到内存中,所发生的只是fstream实现将"当前位置"定位到文件的末尾。

如果你有一个2GB RAM的系统,并且你想附加到一个大于2GB的文件中,那么将整个文件读入回忆录将是相当可怕的。

非常迂腐的是,在向文本文件写入内容时,作为操作系统一部分的文件系统很可能会读取文件的最后几个(千)字节,因为大多数硬盘和类似的存储设备都要求将数据写入固定大小的"块"(如512字节或4千字节)。因此,除非当前文件大小正好位于这样一个块的边界,否则文件系统必须读取文件的最后一个块,并将其与您要求写入的其他数据一起写回。

如果您担心附加到一个非常大的日志文件,不,这不是问题。如果你担心内存安全,因为你的文件中有你不想存储在内存中的秘密数据,那么这可能是一个问题,因为其中的一部分可能会加载到内存中,而你无法控制。