0

你好!

简短的问题是:可能是什么问题?

我的程序的整体内存使用情况(由任务管理器显示)在它运行的所有时间(近 40 分钟)几乎相同,并且我有近 2G 的可用内存。

在win2003r2上运行。

内存分配/释放足够高 - 我需要与其他软件交互,为它准备数据并在它过时时删除它。数据块的数量不是恒定的。

谢谢!

4

2 回答 2

2

通常只有两个原因 realloc 会失败

  1. 没有足够的连续内存来满足请求
  2. 内存损坏

即使您的程序中有足够的总内存来满足请求,也可能由于碎片而没有足够的连续内存来满足请求。确定这一点的最佳方法是使用可以报告连续块的工具来确定是否有可用的工具来满足您的请求。我相信 sysinternals 包中的工具之一就是这样做的。

于 2010-04-26T16:47:36.493 回答
1

没有代码可看,我能给你的只是一个解决方法。

realloc仅在需要增长时尝试使用内存,并将其大小增加一倍,而不是仅仅添加所需的字节数。这对碎片化有很大帮助。既然你说你有足够的内存,那么当你完成时不要担心释放它,如果它足够合理就保留它。

将不惜一切代价减少碎片化作为您的目标,以今天的计算能力,保持 200mb 的工作集对我来说似乎完全没问题。如果您经常超过 500mb 并且您的程序运行了很长时间,您可以开始考虑进一步优化工作集,但在那之前不要担心。

于 2010-04-26T17:07:43.463 回答