在MFC中分配巨大的内存

allocate huge memory in MFC

本文关键字:内存 巨大 分配 MFC      更新时间:2023-10-16

有时我需要处理巨大的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来处理。

如果使用如此大的内存,可能需要增加硬盘上页面文件的大小。