Если я правильно помню, malloc фактически вызывает специфическую для ОС функцию
Не совсем.Большая часть оборудования имеет размер страницы 4 КБ.Операционные системы, как правило, не предоставляют интерфейс выделения памяти, предлагающий что-то меньшее, чем куски размера страницы (и выровненные по страницам).
malloc
тратит большую часть своего времени на управление уже выделенным пространством виртуальной памятии только иногда запрашивает больше памяти у ОС (очевидно, это зависит от размера элементов, которые вы выделяете, и от того, как часто вы free
).
Существует распространенное заблуждение, что когда вы free
что-тонемедленно возвращается в операционную систему.Хотя это иногда происходит (особенно для больших блоков памяти), обычно free
d памяти остается выделенным для процесса и может быть повторно использовано более поздними malloc
с.
Так что большинстворабота ведется в бухгалтерии уже выделенного виртуального пространства.Стратегии распределения могут иметь много целей, таких как быстрая работа, низкая потеря памяти, хорошая локальность, пространство для динамического роста (например, realloc
) и т. Д.
Если вы знаете больше о своей структуре распределения памяти ивыпуская, вы можете оптимизировать malloc
и free
для своих шаблонов использования или предоставить более расширенный интерфейс.
Например, вы можете выделять множество объектов одинакового размера, которые могут изменить оптимальные параметры выделения,Или вы всегда можете освободить большое количество объектов за один раз, и в этом случае вы не хотите, чтобы free
занимался фантастическими делами.
Посмотрите на пулы памяти и obstacks .