为什么我的程序在运行时使用的内存不断增长?

why does the memory my program uses keep growing as it runs?

本文关键字:内存 不断增长 我的 程序 运行时 为什么      更新时间:2023-10-16

从第一次搜索我发现一些消息来源说我可能有内存泄漏。但是当我搜索到内存泄漏的详细信息时,它说当我使用"new"而不使用"delete"时发生,但是我没有在整个程序中使用new,所以我假设这意味着问题是别的东西。我没有任何正在增长的数组或者任何我能想到的会导致这个的东西。在程序初始化之后,我想象它不会再改变,但是它在增长,而且我可能很快就会增加。

程序非常大,所以我认为粘贴在这里不是一个好主意。也许只是一些可能导致这种情况的一般想法,可以帮助我知道去哪里找。

给大家一个概念,这个应用是一个2d的侧边滚轮,就像超级马里奥世界

由于您使用SDL,我怀疑分配来自IMG_LoadSDL_LoadWave等调用中的SDL。作为一个经验法则,当一个API给你一个指针,这意味着你必须要求API释放它。

SDL_Surface为例,调用IMG_Load(或任何其他API函数来分配图像)将分配内存。您需要在每个SDL_Surface上手动调用SDL_FreeSurface,以便在使用它们时释放内存。

这与SDL中的其他资源是一样的。

我看到你有SDL作为你的标签之一,所以我假设这款2D游戏正在使用该库。

如果是这种情况,则很有可能使用库的某个特性可以动态分配内存。

如果你正在为Mac OS X开发,你可以使用Xcode捆绑的免费工具Instruments;这有一个模板用于识别内存泄漏。

如果你正在为Windows开发程序,有很多工具可供你使用,其中之一是英特尔的Parallel Studio,它内置了内存分析工具,尽管它不是免费的。

观察内存使用情况的另一个选择可能是使用跨平台的Google c++测试框架。这个框架将允许您测试部分代码,以便您可以看到对SDL的哪些调用导致内存快速增长。