0

有时我需要处理巨大的 PDF 文件,在这种情况下,我会在循环中使用一些 new 运算符,这是一个非常大的循环,以至于将使用超过 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();
4

2 回答 2

2

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

于 2013-01-16T13:00:40.137 回答
0

如果您想使用特定于 Windows 的分配调用,您可能应该选择VirtualAlloc(). 但我猜想 usingnew已经在分配虚拟内存,因此 Windows 也应该处理对硬盘的分页。

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

于 2013-01-16T13:00:26.767 回答