我正在将内容从内存写入磁盘,以释放内存。

我不知道每次调用open()并将新元素追加到文件末尾时,会否将整个文件读入内存?还是只是指向文件末尾的指针?

最佳答案

如果您使用fstreamofstream::appios::appofstream::ate模式打开文件,则ios::ate实现未完全指定会发生什么。

但是在任何理智的实现中,都不会将文件读入内存,所有发生的就是fstream实现将“当前位置”定位到文件末尾。

如果您的系统具有2GB的RAM,并且想要附加到大于2GB的文件,那么将整个文件读入回忆将是非常糟糕的。

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

如果您担心附加到非常大的日志文件中,则不,这不是问题。如果由于文件中有不想存储的 secret 数据而担心内存安全,那么可能会出现问题,因为其中的一部分可能会加载到内存中,您无能为力那。

10-08 13:45
查看更多