digital-garden/dev/fundamental/Slab allocator.md
Struchkov Mark 388efb36b1
All checks were successful
continuous-integration/drone/push Build is passing
Эффективная встреча.md
2024-09-19 16:48:10 +03:00

3.8 KiB
Raw Permalink Blame History

aliases tags date zero-link parents linked
maturity/🌱
2024-09-19
../../meta/zero/00 Разработка
../../../../knowledge/dev/Аллокация

Slab allocator — это метод выделения памяти, который используется для управления объектами фиксированного размера, таких как структуры данных или буферы в ядре операционной системы (например, в Linux). Он помогает оптимизировать использование памяти и уменьшить фрагментацию.

Slab allocator делит память на несколько областей, называемых slabs (слабы). Каждая slab — это блок памяти, который может содержать несколько объектов одного и того же размера. Когда требуется выделить память для объекта, система аллокатора выделяет память из заранее подготовленного блока slab, что делает процесс выделения и освобождения очень быстрым.

Вот основные концепции:

  • Slab — это область памяти, содержащая несколько объектов одного типа и размера.
  • Cache (кэш) — набор slabs, который управляется для определённого типа объекта. Каждый кэш предназначен для объектов одного типа (например, для структур данных).
  • Page (Страница) — это базовая единица памяти, используемая системой (обычно 4 КБ), которая может содержать один или несколько slabs.

Почему это эффективно?

  • Уменьшение фрагментации: slab allocator позволяет эффективно использовать память для объектов одного типа и размера, избегая проблем с фрагментацией памяти.
  • Быстрое выделение/освобождение: поскольку память выделяется из заранее подготовленных областей, процесс выделения и освобождения памяти выполняется быстрее.
  • Оптимизация работы кэша процессора: объекты одного типа часто используются вместе, что улучшает работу кэша процессора.

Пример использования

  • Slab allocator широко используется в ядре Linux для управления памятью ядра. Он выделяет память для часто используемых структур данных, таких как дескрипторы файлов, процессы и буферы ввода-вывода.

Мета информация

Область:: ../../meta/zero/00 Разработка Родитель:: ../../../../knowledge/dev/Аллокация Источник:: Создана:: 2024-09-19 Автор::

Дополнительные материалы

Дочерние заметки