--- aliases: tags: - maturity/🌱 date: 2024-09-19 zero-link: - "[[../../meta/zero/00 Разработка|00 Разработка]]" parents: - "[[../../../../knowledge/dev/Аллокация|Аллокация]]" linked: --- Slab allocator — это метод выделения памяти, который используется для управления объектами фиксированного размера, таких как структуры данных или буферы в ядре операционной системы (например, в Linux). Он помогает оптимизировать использование памяти и уменьшить фрагментацию. Slab allocator делит память на несколько областей, называемых **slabs** (слабы). Каждая slab — это блок памяти, который может содержать несколько объектов одного и того же размера. Когда требуется выделить память для объекта, система аллокатора выделяет память из заранее подготовленного блока slab, что делает процесс выделения и освобождения очень быстрым. Вот основные концепции: - **Slab** — это область памяти, содержащая несколько объектов одного типа и размера. - **Cache (кэш)** — набор slabs, который управляется для определённого типа объекта. Каждый кэш предназначен для объектов одного типа (например, для структур данных). - **Page ([[Страница|страница]])** — это базовая единица памяти, используемая системой (обычно 4 КБ), которая может содержать один или несколько slabs. **Почему это эффективно?** - **Уменьшение фрагментации**: slab allocator позволяет эффективно использовать память для объектов одного типа и размера, избегая проблем с фрагментацией памяти. - **Быстрое выделение/освобождение**: поскольку память выделяется из заранее подготовленных областей, процесс выделения и освобождения памяти выполняется быстрее. - **Оптимизация работы кэша процессора**: объекты одного типа часто используются вместе, что улучшает работу кэша процессора. **Пример использования** - Slab allocator широко используется в ядре Linux для управления памятью ядра. Он выделяет память для часто используемых структур данных, таких как дескрипторы файлов, процессы и буферы ввода-вывода. *** ## Мета информация **Область**:: [[../../meta/zero/00 Разработка|00 Разработка]] **Родитель**:: [[../../../../knowledge/dev/Аллокация|Аллокация]] **Источник**:: **Создана**:: [[2024-09-19]] **Автор**:: ### Дополнительные материалы - ### Дочерние заметки