我有数千行 C++ 代码,这些代码在小文本文件上运行良好,但在大文本文件(例如 2 GB 大小)上会崩溃。崩溃原因:应用占用内存。
是否可以从磁盘分配内存?因为在大多数情况下,硬盘空间远大于物理内存。如果我可以从硬盘为我的应用程序借用一些空间并在使用后将它们归还,那么我的应用程序崩溃的可能性很小。
以下是我的设计思路:
- 为文件映射创建临时文件(CreateFileMapping, OpenFileMapping)
- 强制我的应用从临时文件分配内存
- 做一些清理工作: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 上运行,即使它由分页文件支持也是如此。
解决方案。
- (最简单)逐行处理文件,无需将整个文件加载到内存中。
- 创建文件映射。即使使用文件映射,您也无法一次访问整个文件,但您可以将文件的一部分映射到内存中。
关于c++ - 如何强制 C++ 从磁盘分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16997739/