在MFC中分配大量内存

时间:2013-01-16 12:49:52

标签: c++ windows visual-studio-2010 stl 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();

2 个答案:

答案 0 :(得分:2)

Memory mapped files是你想要的。 这会将文件映射到内存的“缓冲区”中,操作系统会为您管理它,以便您可以像操作大量RAM一样操作该文件。

答案 1 :(得分:0)

如果您想使用特定于Windows的分配调用,则应该选择VirtualAlloc()。但我想使用new已经分配了虚拟内存,因此Windows也应该对页面进行分页。

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