2

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

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

4

1 回答 1

5

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

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

如果您有一个具有 2GB RAM 的系统并且您想附加到大于 2GB 的文件,那么将整个文件读入内存将是相当糟糕的。

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

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

于 2013-07-03T15:24:08.173 回答