我倾向于使用std * alloc / free函数在我的C程序中分配/释放动态内存。 我想知道是否有任何好的理由来使用GLIB Memory Allocation functions代替std。
如果社区可以指出这些解决方案中的任何一个是赢家/更宽松的情况,我将不胜感激。我也对我在使用其中一个时遇到的性能问题感兴趣。
谢谢!
编辑为州平台
这些程序通常在所有类型的Linux / Unix发行版上运行,通常是使用gcc 4.2编译的64位arch。
答案 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策略总是好的。