Interested Article - Аллокатор
- 2020-12-03
- 1
Аллокатор ( англ. Allocator ) или распределитель памяти в языке программирования C++ — специализированный класс, реализующий и инкапсулирующий малозначимые (с прикладной точки зрения) детали распределения и освобождения ресурсов компьютерной памяти.
Описание
Все классы стандартной библиотеки шаблонов STL управляют памятью с помощью встроенных аллокаторов. Явное задание аллокатора не является обязательным требованием классов-контейнеров библиотеки, однако их можно передавать в конструкторы в качестве параметров шаблона . Причиной внедрения в библиотеку STL механизма аллокаторов стала необходимость абстрагироваться при проектировании шаблонов от ограничений модели памяти вычислительной техники .
В дополнение к этому, многие стандартные библиотечные классы снабжены возможностью подключать пользовательские реализации аллокаторов вместо системных. Отмечается, что стандартные аллокаторы часто основаны на использовании неформализованных языковых тонкостей и поэтому они вызывают наибольшее количество проблем при обеспечении кроссплатформенной .
Синтаксис
Тип значения аллокатора определяет тип того объекта, под хранения которого выделяется память. Если данным типом является
T
, то вызов функции-члена
allocate(n)
позволяет сформировать запрос на выделение пространства в машинной памяти для хранения
n
объектов типа
T
.
После объявления и выделения памяти объекты с нестандартным аллокатором не отличаются от остальных объектов, однако смешивать их друг с другом настоятельно не рекомендуется из-за непредсказуемых последствий. Для идентификации объектов с разными типами распределения памяти можно пользоваться стандартными функциями доступа к аллокаторам
get_allocator()
в комбинации с операцией сравнения
==
.
Примечания
- , Аллокаторы, с. 96.
- G. Andreas, F. Masur от 7 февраля 2019 на Wayback Machine www.codeguru.com, 2004
- , Аллокатор, с. 176—177.
- , Аллокатор, с. 178.
- , Использование распределителей в прикладном программировании, с. 701—702.
Источники
- Н. Джосьютис. C++. Стандартная библиотека. Для профессионалов = The C++ Standard Library. — СПб. : Питер, 2004. — 730 с. — ISBN 5-94723-635-4 .
- М. Остерн. Обобщённое программирование и STL. Использование и наращивание стандартной библиотеки C++ = Generic Programming and the STL: Using and Extending the C++ Standard Template Library. — СПб. : Невский Диалект, 2004. — 544 с. — ISBN 0-201-30956-4 .
- 2020-12-03
- 1