Переполнение стека большим массивом, но не одинаковым вектором?

Сегодня я столкнулся с забавной проблемой работы с большими структурами данных. Сначала я использовал вектор для хранения более 1000000 целых, но позже решил, что мне фактически не нужна динамическая функциональность вектора (я забронировал 1000000 мест, как только он был объявлен в любом случае), и вместо этого было бы полезно иметь возможность добавлять значения в любом месте структуры данных. Поэтому я переключил его на массив и BAM переполнение стека. Я предполагаю, что это потому, что объявление размера массива во время компиляции помещает его в стек и использует динамический вектор вместо того, чтобы поместить его в кучу (что, я думаю, больше?).

Так какой правильный ответ здесь? Вернитесь к динамической системе памяти, чтобы она попала в кучу? Увеличить размер стека? Или я здесь далеко от базы …?

Спасибо!

3

Решение

Я изначально использовал вектор для хранения более 1000000 целых

Отличная идея.

но позже решил, что мне на самом деле не нужна динамическая функциональность вектора (я зарезервировал 1000000 мест, как только это было объявлено)

Не очень хорошая идея. Тебе это было нужно.

и вместо этого было бы полезно иметь возможность добавлять значения в любом месте структуры данных.

Я не следую

Я предполагаю, что это потому, что объявление размера массива во время компиляции помещает его в стек и использует динамический вектор вместо того, чтобы поместить его в кучу (что, я думаю, больше?).

Многое. По умолчанию размер стека вызовов составляет порядка 1–2 МБ. Ваша «куча» (бесплатный магазин) действительно ограничена только вашей доступной оперативной памятью.

Так какой правильный ответ здесь? Вернитесь к динамической системе памяти, чтобы она попала в кучу?

Да.

[править: Иоахим прав — static другой возможный ответ.]

Увеличить размер стека?

Вы могли бы, но даже если бы вы могли растянуть 4MB из этого, вы не оставили себе места для маневра для других локальных переменных данных. Лучше всего использовать динамическую память — это уместно.

Или я здесь далеко от базы …?

Нет.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]