内存分配

内存分配

这些函数提供支持分配和释放内存的功能。

如果使用任意调用来分配内存函数 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 实现。

结构分配

块分配

释放函数

此外,如果 GLib 已 使用 G_DEBUG=gc-friendly 运行,则导出的变量 g_mem_gc_friendly 将为 true。如果是这样,则释放的内存将在释放前被清除为零。

堆栈分配

对齐分配

复制和移动

已弃用的 API