Офис компании: +7 (495) 229 86 64 | info@pingwinsoft.ru

Pingwin

Внедрение и поддержка свободного программного обеспечения

Ответы на вопросыБаза знаний о СПО

"ПингВин Софтвер" - единственная компания в России, оказывающая поддержку СПО в режижиме 24х7
Узнайте, почему компании выбирают переход на СПО.

к списку новостей

Простые списки, основанные на степени двойки

27 октября 2015

Списки свободной памяти, основанные на степени числа 2, чаще всего применяются для реализации процедур malloc() и free() в библиотеке С прикладного уровня. Методика использует набор списков свободной памяти. В каждом списке хранятся буферы определенного размера. Размер буфера всегда кратен степени числа 2. На рис. 12.3 показан пример шести списков, содержащих буферы размером 32, 64, 128, 256, 512 и 1024 байта соответственно.

Каждый буфер имеет заголовок длиной в одно слово, этим фактом ограничивая возможности использования соотносимой с ним области памяти. Если буфер свободен, в его заголовке хранится указатель на следующий свободный буфер. В другом случае в заголовок буфера помещается указатель на список, в который он должен быть возвращен при освобождении. В некоторых реализациях заголовок содержит вместо этой информации размер выделенной области. Это позволяет обнаружить некоторые «баги», однако требует от процедуры free() вычисления местонахождения списка исходя из данных о размерах буферов.

Для выделения памяти клиент вызывает malloc(). В качестве входного аргумента функции передается желаемая величина участка. Распределитель вычисляет минимальный размер буфера, подходящий для удовлетворения запроса. Для этого необходимо прибавить к заданной величине слово, в котором будет размещен заголовок, и округлить полученное значение кверху до числа, являющегося степенью двойки. Буферы размером 32 байта подходят для выделения памяти объемом 0-28 байтов, 64-байтовые буферы — для объемов 29-60 байтов и т. д. После вычисления распределитель извлекает буфер из соответствующего списка и оставляет в заголовке указатель на список свободных участков памяти. Процесс, запрашивающий участок памяти, получает в ответ указатель на следующий после заголовка байт. В настоящее время прием металлолома – очень прибыльное занятие для любой из сторон. Компания reallom.ru осуществляет закупку металлолома на выгодных условиях.

Новости
По тегам
Показать все 64 тега