gpt4 book ai didi

c++ - valgrind 是否检测到 OpenGL 内存泄漏?

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:00 26 4
gpt4 key购买 nike

我正在测试一个 OpenGL 应用程序,我故意不删除大量 OpenGL 结构来检查内存泄漏。

例如,我创建了一个包含多个着色器的数组,但从未调用过 glDeleteShader()

但是 valgrind 报告没有内存泄漏,

是 valgrind 无法检测到这些内存泄漏,还是背后有垃圾收集器确保不会发生此类泄漏?

最佳答案

However valgrind reports no memory leaks

这是因为 Valgrind 的默认配置将 OpenGL 列入黑名单,使其无法被分析。这是出于一个简单的原因:大多数 OpenGL 实现都会对它们的对象进行垃圾回收。当您调用 glDelete… 时,所发生的一切都是,“外部”可访问的对象名称/ID 与实际的内部表示分离。

glDelete… 调用之后,OpenGL 实现可能必须保留实际数据更长的时间;例如,可能仍有正在运行的渲染命令引用名称已被“删除”的对象。实际清理通常比“您的”glDelete… 调用晚得多。此外,大多数 OpenGL 实现实际上不会释放内存,而是保留它以供使用新创建的名称进行回收。

底线是,对于典型的 OpenGL 实现,Valgrind 会报告大量内存泄漏,即使在程序终止时一切都已清理干净。因此它被列入黑名单。

关于c++ - valgrind 是否检测到 OpenGL 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48737167/

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