Менеджер памяти: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м r2.6.5) (робот добавил: ar, ca, cs, de, es, fa, fr, hr, ja, ko, ms, nl, tr, zh изменил: en
Нет описания правки
Строка 1:
'''Менеджер памяти''' — часть [[компьютерная программа|компьютерной программы]] (как [[прикладная программа|прикладной]], так и [[операционная система|операционной системы]]), обрабатывающая запросы на выделение и освобождение [[оперативная память|оперативной памяти]] или (для некоторых [[архитектура ЭВМ|архитектур]] [[ЭВМ]]) запросы на включение заданной области памяти в [[адресное пространство]] [[процессор]]а.
 
Основное назначение менеджера памяти в первом смысле — реализация [[динамически распределяемая память|динамической памяти]]. Например, в [[язык программирования|языке]] [[язык C|C]] динамическое выделение памяти производится через функцию <code>[[malloc]]</code>.
 
Менеджеры памяти часто образуют иерархию: нижестоящие менеджеры задействуют какие-либо закономерности выделения-освобождения памяти и этим снижают нагрузку на вышестоящие. Например:
* Сверху находится менеджер памяти, встроенный в ОС. Он вносит ту или иную [[страничная организация памяти|страницу]] в адресное пространство процесса — а значит, работает с дискретностью в 4 килобайта и очень медленный.
* Менеджер памяти, встроенный в [[Библиотека времени выполнения|стандартную библиотеку языка программирования]], берёт у ОС блоки памяти «оптом» и раздаёт их сообразно с нуждами программиста. При этом он знает, что память отдаётся только одному процессу — а значит, синхронизация потоков производится не [[мютекс]]ами, а [[фьютекс]]ами. И переключение в режим ядра происходит в двух случаях: либо когда «оперативного запаса» памяти не хватает, либо когда один из потоков «натыкается» на занятый фьютекс.
* Некоторые динамические структуры данных, например, [[std::vector]], также берут память у стандартной библиотеки с запасом (например, блоками по 16 элементов). Таким образом, элементы добавляются по одному, но обращение к вышестоящему менеджеру происходит один раз за 16 элементов.
 
Подобная иерархия приводит к тому, что на каждом из уровней «залёживается» свободная память. Но это оправдано: снижается [[фрагментация]] памяти и повышается скорость.
 
== Другие значения ==