Управление памятью - это сервис, предоставляемый базовой операционной системой. Когда мы вызываем malloc()/free()
и не работает ни одна операционная система (например, встроенная система с «голым железом»), как происходит распределение памяти и отслеживание?
Должна существовать сущность, которая отслеживает, какие адреса свободны, а какие нет. Это блок управления памятью ОС. malloc()/free()
будет затем вызывать системные вызовы ОС. Так что нет ОС значит нет malloc()/free()
. Я ошибаюсь, предполагая это?
Обновление:
Во всех ответах указывалось, что malloc/free
может использовать либо статическое распределение пула (когда ОС недоступна), либо использовать sbrk/brk
, которые являются системными вызовами ядра. Вопрос в том, как malloc/free
знает, есть ли ядро под ним или нет?
Ответ (см. Комментарий «Куба Обер» под его ответом ниже):
malloc ничего не нужно знать, потому что библиотека C, с которой вы связываете свой проект, специфична для цели: если вы разрабатываете для Linux, вы используете библиотеку C для Linux, отличную от той, что вы разрабатываете для OS X или Windows, или голые кости ARM Cortex M0. Или, черт возьми, barebones x86. Люди, которые пишут библиотеку C, знают, как ее реализовать, чтобы она работала на желаемую цель. Например, библиотека barebones C для x86 будет использовать EFI и ACPI для запроса списка доступных блоков оперативной памяти, не используемых аппаратным обеспечением или BIOS, а затем использовать их при выполнении запросов на выделение.