Где выделена память для локального вектора C ++? - PullRequest
6 голосов
/ 05 марта 2010

Я заметил, что память для вектора выделяется динамически. Так для локального вектора, где выделяется память?

f(){

 vector<int> vi;
}

Ответы [ 4 ]

19 голосов
/ 05 марта 2010

Вектор выделяется в стеке (28 байт в моей системе). Содержимое вектора размещается в куче.

5 голосов
/ 05 марта 2010

Вы можете изменить способ выделения памяти для контейнеров STL с помощью комбинации типа шаблона Allocator и объекта распределителя, передаваемого в конструктор.

Я задал вопрос о том, как заставить вектор использовать стековое хранилище, и получил этот ответ. Возможно, вам будет интересно.

3 голосов
/ 05 марта 2010

vector выделяется везде, где allocator, который он использует, решает выделить из.

В случае по умолчанию std::allocator используется ::operator new().

3 голосов
/ 05 марта 2010

Чтобы расширить ответ Якоби, RAII означает, что когда vi выходит за пределы области видимости, все, что выделено с помощью new (внутри вектора), равно delete d (в деструкторе вектора). Вот как вы комбинируете распределение стека и кучи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...