- 论坛徽章:
- 0
|
回复 #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 |
|