内存分配
内存分配
这些函数提供支持分配和释放内存的功能。
如果使用任意调用来分配内存函数 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()GMemVTableg_mem_set_vtable()g_mem_is_system_malloc()- 导出的变量
glib_mem_profiler_table g_mem_profile()