免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: C.J
打印 上一主题 下一主题

GTK不用释放的? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-11-27 10:01 |只看该作者

回复 #15 Sam1860 的帖子

g_free的实现,就是通过一个面向对象的虚表,来实现的:

void
g_free (gpointer mem)
{
  if (G_UNLIKELY (!g_mem_initialized))
    g_mem_init_nomessage();
  if (G_LIKELY (mem))
    glib_mem_vtable.free (mem);
}
// 见gmem.c:181


而glib_mem_vtable,为:
/* --- variables --- */
static GMemVTable glib_mem_vtable = {
  standard_malloc,
  standard_realloc,
  standard_free,
  standard_calloc,
  standard_try_malloc,
  standard_try_realloc,
};
// 见gmem.c:110

而这个standard_free为:
#ifdef SANE_MALLOC_PROTOS
#  define standard_free                free
#else
static void
standard_free (gpointer mem)
{
  free (mem);
}
#endif
// 见gmem.c:71

论坛徽章:
0
22 [报告]
发表于 2008-11-28 10:52 |只看该作者
OK,我承认,我错了

论坛徽章:
0
23 [报告]
发表于 2008-11-28 11:35 |只看该作者

回复 #22 Sam1860 的帖子

嘿嘿。

你可能是把g_object_unref和g_free搞混了吧?对于object派生出来的结构,的确用g_object_unref可以通用的不直接地释放掉它。但没有_destroy相应的结构明了。

论坛徽章:
0
24 [报告]
发表于 2008-12-02 13:13 |只看该作者
原帖由 naihe2010 于 2008-11-28 11:35 发表
嘿嘿。

你可能是把g_object_unref和g_free搞混了吧?对于object派生出来的结构,的确用g_object_unref可以通用的不直接地释放掉它。但没有_destroy相应的结构明了。

Gtk.org上是这么写的,对于从GtkObject派生的object,通常你不需要调用g_object_unref来释放,只要你将它加入到一个Gtk的container中,那么当顶层的widget被destroy的时候,会自动的去释放他包含的这些object,这样做的理由就是方便C写代码,具体的你可以看看gtk.org的帮助文档,而对于从GObject派生的object,我认为你应该释放ref,你可以通过写个程序来试试,你手动的释放是不会出错的,但GtkObject就会出错,应该在运行的时候出现warning之类的。所以前面有人说程序退出,gtk自动释放我还真不知道,因为在gtk。org上我没有找到相应的说法,也不知道不释放会不会出现内存泄漏。那位达人知道的还烦告知

论坛徽章:
0
25 [报告]
发表于 2008-12-03 10:55 |只看该作者

回复 #24 UnixZC 的帖子

这点不需要gtk文档说明吧,应该看所用OS的文档
在linux,进程退出,该进程占用的内存都会由OS自动回收的

论坛徽章:
1
辰龙
日期:2015-03-23 10:24:00
26 [报告]
发表于 2010-12-31 16:38 |只看该作者
malloc不free

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
27 [报告]
发表于 2011-01-21 09:31 |只看该作者
只要不是反复new的东西,一般不需要去free,比如程序已启动就new一块大内存或是初始化一些东西,生命周期结束就是程序退出一般不需要free的,像wxWidget或是gtk他们new出来的控件,也是不需要free的。

论坛徽章:
1
辰龙
日期:2015-03-23 10:24:00
28 [报告]
发表于 2011-01-26 16:50 |只看该作者
gtk_main_quit()  回收

论坛徽章:
0
29 [报告]
发表于 2011-02-08 12:13 |只看该作者
使用OS来释放这些东西通常不太好吧,毕竟OS这么做是主要针对出错的程序而言的

GTK库自己释放的话更可以接受
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP