在MFC中分配巨大的内存
allocate huge memory in MFC
有时我需要处理巨大的PDF文件,在这种情况下,我在循环中使用一些新的运算符,这是一个如此巨大的循环,因此将使用超过10 GB的内存。众所周知,我必须使用一些WIN API函数才能使用硬盘。但我不知道如何实现它。有人能帮我吗?
下面是一个代码片段:CMyObject gg_data;
for(__int64 i = 0; i < up_limit(__int64); ++i)
{
//add new data to the PDF file
CCAry pData = new CCAry("myData");
gg_data.AddRef(pData);
}
//after the loop, save file and free memory so that no memory leaks occur...
//Caution: the "save" is a very expensive work, it will take several hours!!!
gg_data.save();
内存映射文件是您想要的。这将文件映射到内存的"缓冲区"中,操作系统为您管理它,以便您可以操作文件,就好像它是一个巨大的RAM块。
如果您想使用特定于windows的分配调用,您可能应该选择VirtualAlloc()
。但是我猜使用new
已经分配了虚拟内存,所以对硬盘的分页也应该由Windows来处理。
如果使用如此大的内存,可能需要增加硬盘上页面文件的大小。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 巨大的内存分配:堆栈与堆
- 在多次运行C++程序时将巨大的矩阵保存在内存中
- 巨大的内存占用,同时向图形添加边缘
- 64位C++二进制文件消耗巨大的内存,即使二进制文件的大小也是巨大的
- 调试冻结计算机的巨大内存泄漏(C++)
- 巨大的SDL_Textures - 内存不足
- 查找巨大的已分配内存块
- 内存映射一个巨大的文件在32位软件运行在64位操作系统
- 从取消引用的迭代器返回 std::map<std::string, int> 时出现巨大的内存泄漏
- opencv中存在巨大的内存泄漏
- 将巨大的字符串从本机传递到 java - 内存不足错误
- 在MFC中分配巨大的内存