内存分配
内存分配
这些函数提供支持分配和释放内存的功能。
如果使用任意调用来分配内存函数 g_new()
、g_new0()
、g_renew()
、g_malloc()
、g_malloc0()
、g_malloc0_n()
、g_realloc()
和 g_realloc_n()
失败,则应用程序将被终止。这也意味着无需检查调用是否成功。
另一方面,g_try_…()
函数系列在失败时将返回 NULL
,该 NULL
可用作检查不成功的内存分配。在这种情况下不会终止应用程序。
由于所有 GLib 函数和数据结构在未另行指定的情况下都内部使用 g_malloc()
,因此任何分配失败都会导致应用程序被终止。
重要的是使用 g_free()
匹配 g_malloc()
(和诸如 g_new()
的封装器)、使用 g_slice_free()
匹配 g_slice_alloc()
(和诸如 g_slice_new()
的封装器)、使用 free()
匹配普通 malloc()
;并且如果使用 C++,则使用 delete
匹配 new
,并使用 delete[]
匹配 new[]
。否则会发生不良情况,因为这些分配器可能使用不同的内存池(而且 new
/delete
调用构造器和析构器)。
自 GLib 2.46 起,g_malloc()
硬编码为始终使用系统 malloc 实现。
结构分配
块分配
g_malloc()
g_malloc0()
g_realloc()
g_try_malloc()
g_try_malloc0()
g_try_realloc()
g_malloc_n()
g_malloc0_n()
g_realloc_n()
g_try_malloc_n()
g_try_malloc0_n()
g_try_realloc_n()
释放函数
此外,如果 GLib 已 使用 G_DEBUG=gc-friendly
运行,则导出的变量 g_mem_gc_friendly
将为 true。如果是这样,则释放的内存将在释放前被清除为零。
堆栈分配
对齐分配
复制和移动
已弃用的 API
g_memdup()
GMemVTable
g_mem_set_vtable()
g_mem_is_system_malloc()
- 导出的变量
glib_mem_profiler_table
g_mem_profile()