glib内存分配VS std*alloc和free

Man*_*res 7 c memory malloc performance glib

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

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

谢谢 !

编辑到州平台

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

pto*_*ato 7

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

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

GLib还有一个切片分配器,如果你要分配许多相同大小的内存块,它会更有效.这不使用系统malloc()free(),但同样,有可能改变这种状况进行调试.

  • 如果一个实现在内存不足的情况下不能"fprintf",它就会被破坏.这个函数没有理由执行任何动态分配,除了打印浮点数时,它甚至不应该使用非平凡的堆栈空间.我已经失去了链接,但几个月前在这里有一个非常好的问题/答案关于处理OOM的最佳实践."让程序崩溃"非常适合"只读"或使用磁盘上保持一致的数据集的程序,但对于保存有价值的未写入数据的程序来说却很糟糕. (6认同)