glib内存分配VS std * alloc和free

时间:2010-10-28 09:25:10

标签: c performance memory malloc glib

我倾向于使用std * alloc / free函数在我的C程序中分配/释放动态内存。  我想知道是否有任何的理由来使用GLIB Memory Allocation functions代替std。

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

谢谢!

编辑为州平台

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

3 个答案:

答案 0 :(得分:5)

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

另一个区别是GLib函数允许您使用g_mem_profile()进行(基本的)内存泄漏检查。

GLib也有一个slice allocator,如果你要分配许多相同大小的内存块,效率会更高。这不会使用系统malloc()free(),但同样可以更改它以进行调试。

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

取决于底层架构。在SCO Unix f.e. malloc遵循“最适合”的策略,这种策略是内存优化但速度限制。

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