2016-09-16 2 views
0

В C++, когда я использую массив с определенным размером: int a[10000]; в качестве локальной переменной, разрешенный размер меньше, чем если бы я объявлял его глобальной.C++ локальный контейнер

Я знаю, что это связано с размером стека функции.

Но как насчет контейнеров, таких как вектор, список, очередь, стек, priority_queue, карта и т. Д.? Ограничены ли они локальными переменными, такими как int a[10000]?

+1

Эти контейнеры ограничены кучей, а не стеком – AndyG

+0

'vector' и т. Д. Динамически распределяют их внутреннее хранилище. «Вектор» находится в локальном хранилище, обычно в стеке, но «вектор» представляет собой немного больше, чем пару указателей на данные, хранящиеся в другом месте с очень разными пределами размера. – user4581301

+0

Зависит от системы, в которой они работают. Они используют динамическое распределение памяти, которое обычно представляет собой больший пул памяти. – NathanOliver

ответ

2

std::array имеет те же ограничения пространства, что и массивы в стиле C. Все остальные стандартные контейнеры распределяют свою память динамически и, таким образом, не ограничиваются размером стека.

0

Нет, поскольку стандартные контейнеры C++ (кроме std::array в C++ 11) будут выделять память в куче.

Смежные вопросы