Я заметил, что память для вектора выделяется динамично. Таким образом для локального вектора, где делает память, выделяется?
f(){
vector<int> vi;
}
Вектор выделяется на стеке (28 байт в моей системе). Содержимое вектора выделяется на куче.
Вы можете изменить способ выделения памяти для контейнеров STL с помощью комбинации типа шаблона распределителя и объекта распределителя, переданного конструктору.
Я задал вопрос о том, как заставить вектор использовать стековое хранилище, и получил этот ответ. Возможно, вам будет интересно.
Чтобы расширить ответ Якоби, RAII означает что когда vi
выходит за пределы области видимости, все, что выделено с помощью new
(внутри вектора), является delete
d (в деструкторе вектора). Вот как вы смешиваете выделение стека и кучи.
Вектор вектор
выделяется везде, откуда аллокатор
, который он использует, решит выделить.
В случае std::allocator
по умолчанию используется ::operator new()
.