Memory leaks 什么';与GTK合作+;根据Valgrind,有这么多内存泄漏的窗口?

Memory leaks 什么';与GTK合作+;根据Valgrind,有这么多内存泄漏的窗口?,memory-leaks,valgrind,gtk,Memory Leaks,Valgrind,Gtk,每当我在valgrind中加载任何由GTK+驱动的应用程序时,它都会报告大量内存泄漏。怎么回事?GTK+有问题吗?GTK+和GLib不会释放“分配一次”内存。它们遵循这样一种范式,即在进程退出之前释放资源是不必要的,而系统无论如何都会释放这些资源(这主要适用于内存)。这当然对调试不太友好,但允许稍微加快程序终止速度并简化代码(这是C语言,即使是“琐碎”任务也需要代码行) 所以,“仍然可以访问”的内存很可能不是有意释放的,也不是泄漏。当然,也可能是一个bug。然而,“肯定丢失”的内存几乎肯定是一个

每当我在valgrind中加载任何由GTK+驱动的应用程序时,它都会报告大量内存泄漏。怎么回事?GTK+有问题吗?

GTK+和GLib不会释放“分配一次”内存。它们遵循这样一种范式,即在进程退出之前释放资源是不必要的,而系统无论如何都会释放这些资源(这主要适用于内存)。这当然对调试不太友好,但允许稍微加快程序终止速度并简化代码(这是C语言,即使是“琐碎”任务也需要代码行)

所以,“仍然可以访问”的内存很可能不是有意释放的,也不是泄漏。当然,也可能是一个bug。然而,“肯定丢失”的内存几乎肯定是一个bug

还要注意的是,程序的内存泄漏bug看起来好像是由GTK+本身触发的。例如,GTK+可能会分配一个对象,以便稍后由程序取消引用(并释放),但程序没有这样做。Valgrind将在GTK+中显示深入的堆栈跟踪,尽管程序中存在bug