std::ofstream::open将整个文件读入内存
std::ofstream::open will it read the entire file into memory?
为了释放内存,我正在将内存中的内容写入磁盘。
我想知道每次我调用open(),并在文件末尾添加新元素时,它会把整个文件读入内存吗?或者它只是指向文件末尾的指针?
如果使用ofstream::app
、ios::app
、ofstream::ate
或ios::ate
模式打开文件,fstream
实现并没有具体指定会发生什么。
但在任何正常的实现中,文件都不会被读取到内存中,所发生的只是fstream
实现将"当前位置"定位到文件的末尾。
如果你有一个2GB RAM的系统,并且你想附加到一个大于2GB的文件中,那么将整个文件读入回忆录将是相当可怕的。
非常迂腐的是,在向文本文件写入内容时,作为操作系统一部分的文件系统很可能会读取文件的最后几个(千)字节,因为大多数硬盘和类似的存储设备都要求将数据写入固定大小的"块"(如512字节或4千字节)。因此,除非当前文件大小正好位于这样一个块的边界,否则文件系统必须读取文件的最后一个块,并将其与您要求写入的其他数据一起写回。
如果您担心附加到一个非常大的日志文件,不,这不是问题。如果你担心内存安全,因为你的文件中有你不想存储在内存中的秘密数据,那么这可能是一个问题,因为其中的一部分可能会加载到内存中,而你无法控制。
相关文章:
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- WinVerifyTrust 仅在使用文件而不是内存 blob 时才有效
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 内存映射文件访问非常慢
- 我正在尝试创建一个C++映射,该映射在boost内存映射文件中具有向量值
- 这些结构在文件中的大小不同,但在程序内存中的大小相同
- 在嵌入式系统中读取文件的内存碎片
- 如何从文件中读取 100x24 矩阵并将其作为浮点矩阵保存在内存中?
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 提升进程间共享内存删除、权限和输出文件
- 将内存文件添加到 clang 编译器实例
- 为什么我的 C++ 程序在执行 TCMALLOC 堆检查器或堆配置文件时使用大量内存
- C++ 从磁盘读取文件并将其写入共享内存
- 为什么在编译时需要知道对象的内存配置文件以进行堆栈放置?
- 为什么 du -sh 输出错误大小的内存映射文件
- 将内存保存到文件并加载它而不必解析数据?
- 将提升管理的共享内存写入文件
- C++类似于 std::vector / boost::array 的文件内存映射容器