如何强制 C++ 从磁盘分配内存?

5 c++ windows visual-studio-2010

我有数千行 C++ 代码,它们在小文本文件上运行良好,但在大文本文件(例如 2 GB 大小)上崩溃。崩溃原因:应用占用内存。

是否可以从磁盘分配内存?因为在大多数情况下,硬盘空间比物理内存大得多。如果我可以从硬盘中为我的应用借用一些空间并在使用后将它们归还,那么我的应用几乎没有崩溃的机会。

以下是我的设计思路:

  1. 为文件映射创建一个临时文件(CreateFileMapping、OpenFileMapping)
  2. 强制我的应用程序从临时文件中分配内存
  3. 做一些清理工作:关闭文件映射并删除临时文件

因为我现有的代码太多了,如果我的设计思路合理,我不想重新设计我的项目。

我不确定设计思想是否可以实现。任何人都可以帮助我吗?

PS:我使用的是 Visual C++ 2010。

Sig*_*erm 4

我有数千行 C++ 代码,它们在小型文本文件上运行良好,但在大型文本文件(例如 2 GB 大小)上崩溃。崩溃原因:应用程序耗尽内存。

您正在尝试将整个文件加载到 32 位系统(或具有 2GB RAM 的 64 位系统,或在 64 位系统上运行的 32 位应用程序)上的内存中。在 32 位系统上,无论您做什么,2 GB 文本文件都无法装入内存,因为使用 32 位寻址,您可以在最大 2 GB RAM 上进行操作,即使它有分页文件支持。

解决方案。

  1. (最简单)逐行处理文件,无需将整个文件加载到内存中。
  2. 创建文件映射。即使使用文件映射,您也无法立即访问整个文件,但您可以将其部分映射到内存中。