Динамическая библиотека C управляет кучей. У кучи есть какой-то заранее выделенный бесплатный магазин. Если среда выполнения не может найти непрерывный блок, она пытается запросить больше памяти у операционной системы - вызывает sbrk()
.
Если последний выходит из строя, «не хватает памяти» - malloc()
возвращает нулевой указатель. Если дополнительная память запрошена успешно, и полученный чанк больше, чем разделено то, что запрашивающий malloc()
запросил для блока в чанке - одна часть помечается как занятая и возвращается вызывающей стороне, а другая добавляется в свободное хранилище.
С момента успешного возврата sbrk()
блок памяти принадлежит адресному пространству вызывающей программы.