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

标签 c++ windows visual-studio-2010

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

是否可以从磁盘分配内存?因为在大多数情况下,硬盘空间远大于物理内存。如果我可以从硬盘为我的应用程序借用一些空间并在使用后将它们归还,那么我的应用程序崩溃的可能性很小。

以下是我的设计思路:

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

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

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

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

最佳答案

I have thousands lines of C++ codes which work well on small text files, but crashes on huge text files (such as 2 GB size). Crash reason: app eats up memory.

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

解决方案。

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

关于c++ - 如何强制 C++ 从磁盘分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16997739/

相关文章:

c++ - 解析在 XML 中的 C/C++ 头文件中定义的嵌套结构/union

c - C Master Volume Windows 中的 __uuidof

c++ - windows下extern函数调用make undefined reference

java - Netbeans IDE - 指定的 jdkhome 无效

c++ - 从文件读取时崩溃

c++ - 如何找到 `FILE*`的相对地址

c++ - 在 C++ 中为基于文本的杆位游戏移动汽车时遇到问题

c++:不允许定义 dllimport 函数,使用 visual studio 2010 构建

c++ - 刷新MFC界面 VC++ 2010

c++ - 为什么这个结果是62呢?