Slice API в значительной степени заимствован из исследований, проведенных Sun Microsystems в 1980-х годах, и тогда он назывался распределением слябов. Я не смог найти оригинальную исследовательскую работу, но вот страница википедии об этом, или вы можете просто погуглить для "распределения плит".
По сути, это устраняет дорогостоящие операции выделения / освобождения, облегчая повторное использование блоков памяти. Это также уменьшает или устраняет фрагментацию памяти. Так что речь идет не только о скорости, хотя она и должна улучшить ее.
Если вы должны использовать или нет - это зависит ... Посмотрите на ответ Хавока - он суммировал его довольно хорошо.
Обновление 1:
Обратите внимание, что современные ядра Linux включают в себя SLAB-распределитель как один из вариантов, и он часто используется по умолчанию. Таким образом, разница между g_slice()
и malloc()
может быть незаметной в этом случае. Однако целью glib является кроссплатформенная совместимость, поэтому использование API-интерфейса слайса может несколько гарантировать стабильную производительность на разных платформах.
Обновление 2:
Как указал комментатор, мое первое обновление неверно. Распределение SLAB используется ядром для выделения памяти процессам, но malloc()
использует не связанный механизм, поэтому утверждение, что malloc()
эквивалентно g_slice()
в Linux, недопустимо. Также см. этот ответ для более подробной информации.