描画に 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 グラフィックス ライブラリは、シングルトンなどとして割り当てられた一部のデータを保持しますか?
ローカルのグラフィックス ドライバーに問題があるだけでしょうか?