Пул памяти

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

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

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

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

Содержание
  • 1 Простая реализация пула памяти
  • 2 Пул памяти против malloc
  • 3 См. Также
  • 4 Внешние ссылки
Простая реализация пула памяти

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

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

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

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

Недостатки

  • Может потребоваться настройка пулов памяти для приложения, которое их развертывает.
Смотрите также
внешние ссылки
Последняя правка сделана 2024-01-02 06:55:50
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте