40 lines
3.8 KiB
Markdown
40 lines
3.8 KiB
Markdown
|
---
|
|||
|
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]]
|
|||
|
**Автор**::
|
|||
|
### Дополнительные материалы
|
|||
|
-
|
|||
|
|
|||
|
### Дочерние заметки
|
|||
|
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|