我正在测试一个OpenGL应用程序,有意不删除许多OpenGL结构以检查内存泄漏。
例如,我创建了一个多个着色器的数组,从未调用glDeleteShader()
然而,valgrind没有报告任何内存泄漏,
是因为valgrind无法检测到这些内存泄漏,还是因为有一些垃圾回收器在背后确保没有这样的泄漏发生?
我正在测试一个OpenGL应用程序,有意不删除许多OpenGL结构以检查内存泄漏。
例如,我创建了一个多个着色器的数组,从未调用glDeleteShader()
然而,valgrind没有报告任何内存泄漏,
是因为valgrind无法检测到这些内存泄漏,还是因为有一些垃圾回收器在背后确保没有这样的泄漏发生?
glDelete...
时,所有“外部”可访问的对象名称/ID都将与实际内部表示分离。
在glDelete...
调用之后,OpenGL实现可能需要把实际数据保留更长时间;例如可能仍有渲染命令正在引用已“删除”名称的对象。实际清理通常比“您”的glDelete...
调用要晚得多。此外,大多数OpenGL实现实际上不会释放内存,而是将其保留以供新创建的名称循环使用。
总之,在典型的OpenGL实现中,即使在程序终止时一切都干净地整理了,Valgrind也会报告许多内存泄漏。因此它被列入黑名单。