我正在把记忆中的东西写到磁盘上,以便释放我的记忆。
我不知道每次调用open(),并将appendix新元素添加到文件末尾,它会将整个文件读入内存吗?或者它只是指向文件末尾的指针?
答案 0 :(得分:5)
如果您使用fstream
,ofstream::app
,ios::app
或ofstream::ate
模式打开文件,ios::ate
实施并未明确说明会发生什么。
但是在任何理智的实现中,文件都不会被读入内存,所有发生的事情都是fstream
实现将“当前位置”定位到文件的末尾。
如果你的系统有2GB的内存并且想要附加到大于2GB的文件,那么将整个文件读入memoiry会相当糟糕。
非常迂腐,在向文本文件写入内容时,作为操作系统一部分的文件系统很可能会读取文件的最后几个(千字节)字节,因为大多数硬盘和类似存储要求将数据写入“块”,这是一个固定大小(例如512字节或4千字节)。因此,除非当前文件大小正好位于此类块的边界,否则文件系统必须读取文件的最后一个块并将其与您要写入的其他数据一起写回。
如果您担心附加到一个非常大的日志文件,那么,这不是问题。如果你担心内存安全,因为你的文件有你不想存储在内存中的秘密数据,那么可能会有问题,因为其中一部分可能会被加载到内存中,你无法控制这一点。