Подтвердить что ты не робот

Контейнеры STL в стеке и куча

Если std::vector и друзья меняют размер, значит ли это, если я объявляю такой вектор:

std::vector<string> myvec;

Затем он изменит размер, используя больше стека, тогда как:

std::vector<string> *myvec = new std::vector<string>();

Будет ли изменяться размер с использованием большего количества кучи?

4b9b3361

Ответ 1

Векторы выделяются в куче во внутренней части.

Единственное, что вы платите в стеке для bector на основе стека, - это пара байтов, внутренний буфер всегда будет выделен из кучи.

Так эффективно, когда вы делаете vec = new vector(), вы выделяете небольшое количество, которое может быть не очень хорошим.

Ответ 2

В первом случае вы создаете вектор в стеке. Это не означает, что все внутренние объекты векторов также находятся в стеке. Фактически, вектор по-прежнему будет выделять память, необходимую для хранения объектов только в куче. Это связано с тем, что для выделения в стеке вы должны знать, сколько объектов создать. Но эта информация недоступна, поэтому единственной оставшейся опцией является выделение памяти для содержащегося объекта из кучи.

Ответ 3

std::vector всегда имеет свой буфер, выделенный в кучу. Таким образом, независимо от того, где сам вектор присваивается изменением размера, он будет влиять только на кучу.