Динамическое Распределение Памяти - PullRequest
1 голос
/ 28 октября 2009

Как вызов malloc управляется библиотекой пользователя. Мне нужно объяснение: «Как распределяется память в пространстве пользователя, когда вызывается malloc. Кто управляет им. Как sbrk () вызывается для входа в пространство ядра».

Ответы [ 2 ]

6 голосов
/ 28 октября 2009

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

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

С момента успешного возврата sbrk() блок памяти принадлежит адресному пространству вызывающей программы.

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

Пакет функций malloc () управляет пространством. Он получает относительно большие порции памяти из системы с помощью sbrk () и передает меньшие порции своим вызывающим сторонам по запросу, используя любой из многих возможных алгоритмов, которые он использует. Функция free () помещает освобожденную память обратно в свой список «доступных для использования». Очень редко он фактически освобождает память обратно самой операционной системе.

Существует множество статей о дизайне различных версий malloc (). В частности, существует много отладочных версий malloc (), которые ищут злоупотребления выделенной памятью. Вы можете прочитать о распределении памяти в Knuth «Искусство компьютерного программирования»; он в томе 1 в моей памяти служит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...