LINUX.ORG.RU

освобождение памяти в gtk


0

0

суть такая...
есть GtkVBox1. в него пакую другой GtkVBox2. Далее в бокс2 пакую виджеты .... после надо удалить полностью содержимое бокс2 и его самого, соответственно память после них должна освободиться.

вот код высвобождения

gtk_tree_store_clear(GTK_TREE_STORE(base->treestore));
g_object_steal_data(G_OBJECT(base->treeview), "base");
gtk_widget_destroy(base->treeview);
gtk_widget_destroy(base->toolbar);
g_object_unref(base->treestore);
g_free(base->base_vbox);
g_free(base->session);
g_free(base);

base - структура
session - структура

проверяю так...
запускаю приблуду
слежу за файлом /proc/$PID/stat в поле vsize

инициализирую структуру base, создаю виджеты, пакую в base_vbox ( это GtkVBox2), потом создаю GtkVBox1, пакую туда base_vbox.

использование памяти увеличилось

вызываю функцию удаления структуры base с последующим удалением виджетов (как описано выше)

размер vsize в файле stat нифига не изменился.

создаю еще раз объект base и пакую...

использование памяти увеличилось

удаляюю объект base

в vsize нифига не уменьшается....

может я не так высвобождаю ресурсы? ктонть, подскажите плиз.

Deleted

ты не туда смотриш

нужные тебе моменты нужно ловить при помощи отлавливателей утечек памяти

снаружи ты этого так просто не увидиш, нужно только залезать внутрь процесса

cvv ★★★★★
()

Ты освободил ресурсы, а система решила, что раз память пока никому больше не нужна - значит ее можно пометить как зарезервированую за тобой. Вообще то, что показывают комманды ps, top, free и другие - это сферический конь в вакууме. Очень похоже на индикатор бензина в машине. Смотришь больше половины - значит можно дальше ехать, меньше - значит нужно заправляться (докупать оперативки).

--- Для отлавливания утечек пользуйся например valgrind.

eXOR ★★★★★
()
Ответ на: комментарий от eXOR

>система решила, что раз память пока никому больше не нужна - значит ее можно пометить как зарезервированую за тобой.

Ну, это очнь вольно выражаясь, на самом деле это происходит только если куча "заткнута" с конца.

Посмотреть статистику в Linux использования можно функцией malloc_stats(). Если всё, занятое системой, используется -- значит в программе или в gtk действительно утечки.

mr ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.