gpt4 book ai didi

带有 D3DX9 的 C++ - 内存大小以 10 MB/秒的速度不断增加 - 为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:14 25 4
gpt4 key购买 nike

我正在研究一个 3D 引擎作为学校项目。我已经安装了虚拟泄漏检测器来消除内存泄漏(并且它起作用了,因为我不再得到任何这些转储)。最近,我不小心让我的应用程序运行了 5 分钟......我的 PC 变得非常慢。我已经通过注释行等找到了问题,但我无法找出为什么在我关闭应用程序之前 C++ 不会释放我清除的内存。

问题:“内部”内存泄漏,看起来 C++ 只会在应用程序关闭后删除某些内容

代码: My render code (at pastebin Yz79Ck0b)

注意事项:我知道我不应该每次都创建一个新的网格,但这不应该导致这个问题,对吧?我的 IDE 是 Visual Studio 2008,我使用的是 WIN32 项目。当我取出纹理和模型时,我有 0 字节的内存增长。

最佳答案

正如 Sanjit 所说,您必须使用 delete[] 来删除数组 - 正如 DeadMG 所说,RAII 容器是最好的做法,不会搞砸释放您的资源。

然而,尽管从文档中不是很明显,但显然所有 Direct3d resources (包括 IDirect3d9Texture 创建的 D3DXCreateTextureFromFile)继承自 IUnknown - 换句话说,它们是 COM 对象。你需要.Release()使用完毕后的 COM 对象:

for (int i=0; i<len; i++)
if (m_Texture[i] != NULL)
m_Texture[i]->Release();//decrement COM refcount to permit releasing the resource
delete[] m_Texture;
delete[] m_Material;

您可能想养成将重复逻辑包装到方便的 RAII 容器中的习惯。 ATL 内置了这样的东西,请参阅 CComPtr 上的 MSDN 文档.警告:我以前从未使用过它,但如果您打算使用 COM 编写比玩具应用程序更大的东西,那么类似的东西是一个非常好的主意。

关于带有 D3DX9 的 C++ - 内存大小以 10 MB/秒的速度不断增加 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4431624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com