[9663] in The GTK GIMP ToolKit mailing list archive

home help back first fref pref prev next nref lref last post

[gtk-list] Re: memory maintence in gtk

daemon@ATHENA.MIT.EDU (Havoc Pennington)
Fri Oct 30 00:17:48 1998

Date: Thu, 29 Oct 1998 23:16:28 -0600 (CST)
From: Havoc Pennington <rhpennin@midway.uchicago.edu>
To: gtk-list@redhat.com
In-Reply-To: <Pine.GSO.3.96.981029203413.17275A-100000@well.com>
Resent-From: gtk-list@redhat.com
Reply-To: gtk-list@redhat.com


On Thu, 29 Oct 1998, Todd Gureckis wrote:
> is it necessary/customary to free all the memory allocated by the creation
> of the window once it is closed... for example running free() on all
> the GtkWidget pointers in the dialog window?
>

Using g_free() instead of gtk_widget_destroy will create huge memory
leaks and probably segfault too.
 
> Is there a built in way to do this in gtk?  This is a kind of un-informed
> observation, but when i create a dialog, then later gtk_widget_destroy()
> the dialog, the memory size of my application does not shrink when I list
> it in top. 

Some detail of your system's memory management or top, not because memory
wasn't released. Or it could be Gtk's GMemChunk stuff; the memory wasn't
necessarily returned to the system, it may have been recycled in other
GtkObjects. I haven't looked at this source code. In any case rest assured
gtk_widget_destroy does the right thing.

> I wasn't sure if it would be better to save the memory,
> and dynamically allocate the whole dialog window, or leave it in memory,
> so cpu is saved the next time the dialog window is created.
> 

The usual thing is to create the dialog each time, and destroy it when you
close it. 

If the dialog is expensive to create though, and there's a noticeable
pause or CPU use, you can keep it around all the time. Do something like
this:

void create_dialog()
{
 static GtkWidget* dialog = NULL;

 if (dialog == NULL) {
   dialog = gtk_dialog_new();
   /* do other creation */
 }

 gtk_widget_show(dialog);
}

When the user closes the dialog (by clicking a button, or when you get
delete_event - be sure to handle delete_event), you gtk_widget_hide() and
it will go away until you show it again by re-calling create_dialog().

There are variations on the theme, but you get the idea. Basically a
space/time tradeoff.

Havoc


-- 
To unsubscribe: mail -s unsubscribe gtk-list-request@redhat.com < /dev/null


home help back first fref pref prev next nref lref last post