C++ std::ofstream::open它会将整个文件读入内存吗?

C++ std::ofstream::open它会将整个文件读入内存吗?,c++,memory,fstream,C++,Memory,Fstream,我正在将内存中的内容写入磁盘以释放内存 我想知道每次调用open()并在文件末尾添加新元素时,它是否会将整个文件读入内存?或者它只是一个指向文件结尾的指针?如果您使用ofstream::app、ios::app、ofstream::ate或ios::ate模式打开文件,那么fstream实现不会精确指定发生什么 但在任何正常的实现中,文件都不会读入内存,所发生的只是fstream实现将“当前位置”定位到文件的末尾 如果你有一个内存为2GB的系统,并且你想附加到一个大于2GB的文件中,那么将整个文

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


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

如果您使用
ofstream::app
ios::app
ofstream::ate
ios::ate
模式打开文件,那么
fstream
实现不会精确指定发生什么

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

如果你有一个内存为2GB的系统,并且你想附加到一个大于2GB的文件中,那么将整个文件读入回忆录就相当糟糕了

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


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

我不明白;如何打开和追加执行读取?您应该使用
ate
打开文件以获取指向结尾的指针。我认为严格来说,实现可以做到这一点。但不会的t@trojanfoe我不需要读,我需要写…@0x499602D2所以如果我使用ate,它会在我写之前将整个文件读入内存吗?如果我使用open而不使用ate,它会将整个文件读入内存吗?或者它只读取第一个指针?实际上,它根本不会读取文件。我将进行编辑以使其更清晰。正如其他人所说:
open()
不会将任何内容读入内存。