9

我倾向于使用 std *alloc/free 函数在我的 C 程序中分配/释放动态内存。我想知道是否有充分的理由使用GLIB 内存分配函数而不是 std 函数。

如果社区能指出这些解决方案中的任何一个是赢家/输家的情况,我将不胜感激。我也对使用其中一种时可能遇到的性能问题感兴趣。

谢谢 !

编辑到状态平台

这些程序通常在所有类型的 Linux/Unix 发行版上运行,通常是使用 gcc 4.2 编译的 64 位拱门。

4

3 回答 3

8

在我看来,GLib 函数和标准库函数之间最有价值的区别在于,如果分配失败,GLib 函数会中止程序。不再检查返回值malloc()是否为NULL! 除此之外,分配策略没有区别-内部g_malloc()调用malloc(),尽管正如此处的其他答案之一所述,可以更改它。

另一个区别是 GLib 函数允许您使用g_mem_profile().

GLib 也有一个切片分配器,如果您分配许多大小相等的内存块,它会更有效。这不使用系统malloc()free()但同样,可以出于调试目的对其进行更改。

于 2010-10-28T12:09:29.240 回答
4

如果你出于某种原因想自己控制底层分配策略,可以使用g_mem_set_vtable()来使用自己的函数,而不是 malloc() / free()。

malloc/free 也可以通过魔术链接选项实现这一点,但 GLIB 为此公开了一个明确的 API,以及使用mem-profiler-table添加您自己的分配和免费日志记录的可能性。

于 2010-10-28T12:00:30.663 回答
2

取决于底层架构。在 SCO Unix fe 下,malloc 遵循“最佳匹配”策略,即内存优化但速度分隔。

因此,如果您的程序依赖于不同系统/平台上的特殊假设,那么控制 malloc 策略总是好的。

于 2010-10-28T09:30:20.797 回答