【发布时间】:2010-05-21 14:14:47
【问题描述】:
每当我在 valgrind 中加载任何基于 GTK+ 的应用程序时,它都会报告大量内存泄漏。那是怎么回事? GTK+ 有问题吗?
【问题讨论】:
标签: memory-leaks valgrind gtk
每当我在 valgrind 中加载任何基于 GTK+ 的应用程序时,它都会报告大量内存泄漏。那是怎么回事? GTK+ 有问题吗?
【问题讨论】:
标签: memory-leaks valgrind gtk
GTK+ 和 GLib 不会释放“分配一次”内存。他们遵循这样一种范式,即在进程退出之前释放资源是不必要的,无论如何都会被系统释放(这主要适用于内存)。这当然对调试不太友好,但可以稍微加快程序终止并简化代码(这是 C,即使是“微不足道”的任务也需要一行代码)。
因此,“仍然可以访问”的内存很可能只是没有被有意释放,而不是泄漏。或者,当然,可能是一个错误。然而,“绝对丢失”的内存几乎可以肯定是一个错误。
还请注意,程序的内存泄漏错误看起来好像是由 GTK+ 本身触发的。例如,GTK+ 可能会分配一个对象,以便稍后由程序取消引用(和释放),但它没有这样做。 Valgrind 将在 GTK+ 深处显示堆栈跟踪,尽管程序中存在错误。
【讨论】: