我在C中开发了一个包含大约20个函数的应用程序。我用动态内存分配的每个地方都返回二维数组。此外,每次迭代都有大约5,000,000次迭代和大约50-100个100个矩阵。我想我已经正确地释放了分配的内存。当我启动程序时,RAM内存从1000KB开始(我在Windows任务管理器中查看过)。它慢慢上升,程序崩溃。我最初认为我的程序中存在内存泄漏;但经过一周的调试,我没有找到。然后我发现,当我最小化运行程序的窗口时,RAM的使用率会回落到1000k,然后再次上升。我需要每10到15分钟最大化和最小化,以阻止我的程序崩溃。我的模拟运行了12个小时。我不能只是最大化和最小化一整天的窗口。我想到了以下几点,可能无法到达哪里。
一般观察:通过最小化和最大化程序窗口每10分钟成功运行这些模拟,我的系统变得缓慢;但没有任何事情发生。这导致了Windows有bug的唯一结论。 最后说明:我在win XP 32 bit上运行。 GCC编译器。代码块中的书面代码。
答案 0 :(得分:1)
我的代码中肯定有内存泄漏。我终于找到了它。我的问题解决了。但问题仍然是“每次我最小化模拟窗口时,为什么我的内存使用量会下降?”正如@Alex K.所说,操作系统在我们最小化它时修剪了一个过程的工作集。这对我来说是一个完全奇迹。
对于遭受内存泄漏的人,我建议不要去valgrind,而是使用一些全局变量来说'泄漏'。每次使用malloc或calloc或realloc和减少每次使用免费的增量。在IDE的调试模式下,观察监视窗口中的变量“泄漏”(存在于代码块和几乎每个IDE中)。我以这种方式发现了我的记忆泄漏。