Менеджер памяти
Менеджер памяти — часть компьютерной программы (как прикладной, так и операционной системы), обрабатывающая запросы на выделение и освобождение оперативной памяти или (для некоторых архитектур ЭВМ) запросы на включение заданной области памяти в адресное пространство процессора.
Основное назначение менеджера памяти в первом смысле — реализация динамической памяти. Например, в языке C динамическое выделение памяти производится через функцию malloc
.
Иерархия менеджеров памяти
Менеджеры памяти часто образуют иерархию: нижестоящие менеджеры задействуют какие-либо закономерности выделения-освобождения памяти и этим снижают нагрузку на вышестоящие. Например:
- Системный. Сверху находится менеджер памяти, встроенный в ОС. Он вносит ту или иную страницу в адресное пространство процесса — а значит, работает с дискретностью в 4 килобайта, что делает его очень медленным.
- Принадлежащий процессу. Менеджер памяти, встроенный в стандартную библиотеку языка программирования, берёт у ОС блоки памяти «оптом» и раздаёт их сообразно с нуждами программиста. При этом он знает, что память отдаётся только одному процессу — а значит, синхронизация потоков производится не мютексами, а фьютексами. И переключение в режим ядра происходит в двух случаях: либо когда «оперативного запаса» памяти не хватает и нужно обратиться к ОС, либо когда один из потоков «натыкается» на занятый фьютекс.
- Специализированные. Некоторые динамические структуры данных, например, std::vector, также берут память у стандартной библиотеки с запасом (обычно, блоками экспоненциально увеличивающегося размера). Таким образом, элементы добавляются по одному, но обращение к вышестоящему менеджеру происходит один раз на большое количество элементов. Объектный пул выделяет память под объекты конкретного типа и удобен, если они выделяются-освобождаются в больших количествах, и т. д.
Подобная иерархия приводит к тому, что на каждом из уровней «залёживается» свободная память. Но это оправдано: снижается фрагментация памяти и повышается скорость.
См. также
- Memory Management Unit (MMU) и Контроллер памяти — менеджер памяти как часть аппаратного обеспечения
- Virtual Memory Manager (VMM) — менеджер памяти как часть операционной системы
- Виртуальная память
- Иерархия памяти
- Компьютерная память