在测试使用 OpenGL 进行绘图的 C++ Windows 应用程序时遇到以下问题。对于测试,我使用了 GlowCode 9.1 分析器。
应用程序结束后,显示方法GDI32!ChoosePixelFormat泄漏了相当多的内存,超过 6 MB。
应用程序根据openGL规范关闭所有资源,即调用:
wglMakeCurrent(iMainHDC, NULL);
wglDeleteContext(iMainHRC);
wglMakeCurrent(iHSHDC, NULL);
wglDeleteContext(iHSHRC);
DeleteGDI(iHSGDIBackBufferBitmap, iHSGDIBackBufferDC);
DestroyWindow(iHSWindowHandle);
DeleteGDI(iMainGDIBackBufferBitmap, iMainGDIBackBufferDC);
DestroyWindow(iMainWindowHandle);
所以不应该是忘记销毁资源的情况。
为了摆脱这种内存泄漏,我是否需要运行其他一些释放过程?
我的目标是让应用程序在退出时泄漏 0 个字节。这完全可以做到吗?或者 Windows 图形库是否将一些数据分配为单例等?
会不会是本地显卡驱动的问题?