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

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 5:
Менеджеры памяти часто образуют иерархию: нижестоящие менеджеры задействуют какие-либо закономерности выделения-освобождения памяти и этим снижают нагрузку на вышестоящие. Например:
* Сверху находится менеджер памяти, встроенный в ОС. Он вносит ту или иную [[страничная организация памяти|страницу]] в адресное пространство процесса — а значит, работает с дискретностью в 4 килобайта и очень медленный.
* Менеджер памяти, встроенный в [[Библиотека времени выполнения|стандартную библиотеку языка программирования]], берёт у ОС блоки памяти «оптом» и раздаёт их сообразно с нуждами программиста. При этом он знает, что память отдаётся только одному процессу — а значит, синхронизация потоков производится не [[мютекс]]ами, а [[фьютекс]]ами. И переключение в режим ядра происходит в двух случаях: либо когда «оперативного запаса» памяти не хватает, и нужно обратиться к ОС, либо когда один из потоков «натыкается» на занятый фьютекс.
* Некоторые динамические структуры данных, например, [[std::vector]], также берут память у стандартной библиотеки с запасом (например, блоками по 16 элементов). Таким образом, элементы добавляются по одному, но обращение к вышестоящему менеджеру происходит один раз за 16 элементов.