Распределитель по умолчанию, std::allocator<>
, будет обрабатывать все выделения, сделанные std::vector<>
(и другими).Он будет делать новые выделения из кучи каждый раз, когда потребуется новое выделение.
Предоставляя пользовательский распределитель, вы можете, например, выделить большой кусок памяти заранее, а затем разделить его на части и раздать меньшие куски.когда необходимы отдельные распределения.Это значительно увеличит скорость выделения, что хорошо, например, в играх, за счет повышенной сложности по сравнению с распределителем по умолчанию.
Некоторые реализации типа std
имеют внутреннее хранилище на основе стека для небольших объемов.данных.Например, std::basic_string<>
может использовать то, что называется оптимизация маленькой строки , где только строки длиннее некоторой фиксированной длины, скажем, 16 символов (просто пример!), Получают распределение из распределителя, в противном случаеиспользуется внутренний массив.