выделение памяти glib VS std * alloc и free - PullRequest
7 голосов
/ 28 октября 2010

Я склонен использовать функции std * alloc / free для выделения / освобождения динамической памяти в моих C-программах.Интересно, есть ли хорошие причины использовать функции выделения памяти GLIB вместо стандартных.

Буду признателен, если сообщество может указатьситуации, когда любое из этих решений является победителем / проигравшим.Меня также интересуют проблемы с производительностью, которые могут возникнуть при использовании одного или другого.

Спасибо!

Отредактировано для платформ состояния

Эти программы обычно работают во всех типах дистрибутивов Linux / Unix, обычно это 64-битные архивы, скомпилированные с использованием gcc 4.2.

Ответы [ 3 ]

5 голосов
/ 28 октября 2010

По моему мнению, наиболее ценное различие между функциями GLib и функциями стандартной библиотеки заключается в том, что функции GLib отменяют программу в случае неудачного размещения. Больше не нужно проверять, является ли возвращаемое значение из malloc() равным NULL! Кроме этого, нет никакой разницы в стратегии распределения - g_malloc() вызывает malloc() внутри, хотя, как говорится в одном из других ответов, это можно изменить.

Другое отличие состоит в том, что функции GLib позволяют выполнять (элементарную) проверку утечки памяти с помощью g_mem_profile().

GLib также имеет распределитель слайсов , который более эффективен, если вы выделяете много кусков памяти одинакового размера. Это не использует систему malloc() и free(), но опять же, это можно изменить для целей отладки.

4 голосов
/ 28 октября 2010

Если по какой-то причине вы хотите самостоятельно контролировать основную стратегию распределения, вы можете использовать g_mem_set_vtable () , чтобы использовать собственные функции вместо malloc () / free ().

Это возможно и с помощью malloc / free с помощью опций магического связывания, но GLIB предоставляет для этого явный API, а также возможность добавить собственное размещение и бесплатное ведение журнала с помощью таблицы mem-profiler-table . * 1007.*

2 голосов
/ 28 октября 2010

зависит от базовой архитектуры. Под SCO Unix f.e. malloc следует стратегии наилучшего соответствия, которая оптимизирована для памяти, но ограничивает скорость.

Так что, если ваша программа зависит от специального допущения на разных системах / платформах, всегда полезно контролировать malloc-стратегию.

...