Обработка ошибок и исключений. Распределители памяти

   
На этом шаге мы приведем общие сведения по использованию распределителей памяти.

   
В стандартной библиотеке C++ достаточно часто используются специальные объекты, занимающиеся
выделением и освобождением памяти. Такие объекты называются распределителями (allocators).
Распределитель представляет собой абстракцию, которая преобразует потребность в памяти в физическую операцию
ее выделения. Параллельное использование разных объектов-распределителей позволяет задействовать в программе
несколько разных моделей памяти.

   
Сначала распределители появились в STL для решения раздражающей проблемы с различиями в типах
указателей для разных моделей памяти (near, far, huge). Сейчас на их основе создаются решения, способные
поддерживать разные модели памяти (общая память, уборка "мусора", объектно-ориентированные базы данных)
без изменения интерфейса. Впрочем, такое применение распределителей - явление относительно недавнее, и
оно еще не получило широкого распространения (вероятно, в будущем ситуация изменится).

   
В стандартной библиотеке C++ определяется следующий распределитель по умолчанию:

  namespace std {
    template <class T>
    class allocator; 
  }

   
Этот распределитель используется по умолчанию во всех тех ситуациях, когда распределитель может передаваться в
качестве аргумента. Он использует стандартные средства выделения и освобождения памяти, то есть операторы
new и delete, но в спецификации ничего не говорится о том, когда и как эти операторы должны
вызываться. Таким образом, конкретная реализация распределителя по умолчанию может, например, организовать
внутреннее кэширование выделяемой памяти.

   
В большинстве программ используется распределитель по умолчанию. Иногда библиотеки предоставляют
специализированные распределители, которые просто передаются в виде аргументов. Необходимость в
самостоятельном программировании распределителей возникает очень редко, на практике обычно достаточно
распределителя по умолчанию.

   
Со следующего шага мы начнем знакомиться со вспомогательными средствами стандартной библиотеки C++.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий