Jump to content

Пул памяти

Пулы памяти , также называемые распределением блоков фиксированного размера , представляют собой использование пулов для управления памятью , которое позволяет осуществлять динамическое распределение памяти . Динамическое распределение памяти может быть достигнуто за счет использования таких методов, как malloc и C++ в оператор new ; хотя устоявшиеся и надежные реализации страдают от фрагментации из-за переменных размеров блоков, их не рекомендуется использовать в системе реального времени из-за производительности. Более эффективное решение — предварительно выделить несколько блоков памяти одинакового размера, называемых пулом памяти . Приложение может выделять, получать доступ и освобождать блоки, представленные дескрипторами , во время выполнения .

Многие операционные системы реального времени используют пулы памяти, такие как Transaction Processing Facility .

Некоторые системы, такие как веб-сервер Nginx , используют термин «пул памяти» для обозначения группы выделений переменного размера, которые позже могут быть полностью освобождены. Это также известно как регион ; см. управление памятью на основе региона .

Простая реализация пула памяти

[ редактировать ]

Простой модуль пула памяти может выделить, например, три пула во время компиляции с размерами блоков, оптимизированными для приложения, развертывающего модуль. Приложение может выделять, получать доступ и освобождать память через следующий интерфейс:

  • Выделяйте память из пулов. Функция определит пул, в который помещается требуемый блок. Если все блоки этого пула уже зарезервированы, функция пытается найти один из следующих, более крупных пулов. Выделенный блок памяти представлен дескриптором .
  • Получите указатель доступа к выделенной памяти.
  • Освободите ранее выделенный блок памяти.
  • Дескриптор может быть реализован, например, с помощью unsigned int. Модуль может интерпретировать дескриптор внутри себя, разделяя его на индекс пула, индекс блока памяти и версию. Индекс пула и блока памяти обеспечивает быстрый доступ к соответствующему блоку с помощью дескриптора, а версия, которая увеличивается при каждом новом выделении, позволяет обнаруживать дескрипторы, блок памяти которых уже освобожден (из-за слишком долгого хранения дескрипторов).

Пул памяти против malloc

[ редактировать ]

Преимущества

  • Пулы памяти позволяют распределять память с постоянным временем выполнения. Освобождение памяти для тысяч объектов в пуле — это всего лишь одна операция, а не одна за другой, если malloc . для выделения памяти для каждого объекта используется
  • Пулы памяти можно сгруппировать в иерархические древовидные структуры, что подходит для специальных структур программирования, таких как циклы и рекурсии .
  • Пулам блочной памяти фиксированного размера не требуется хранить метаданные выделения для каждого выделения, описывающие такие характеристики, как размер выделенного блока. Это обеспечивает существенную экономию пространства, особенно при небольших выделениях.
  • Обеспечивает детерминированное поведение в системах реального времени, избегая ошибок нехватки памяти.

Недостатки

  • Пулы памяти, возможно, потребуется настроить для приложения, которое их развертывает.

См. также

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5d1c3029c349fe59478f5a0e2d9056dd__1721822340
URL1:https://arc.ask3.ru/arc/aa/5d/dd/5d1c3029c349fe59478f5a0e2d9056dd.html
Заголовок, (Title) документа по адресу, URL1:
Memory pool - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)