Вопрос

У меня есть (потенциально глупый) вопрос о C ++ STL.Когда я создаю контейнер (вектор, набор, карту и т.д.), выделяется ли он в стеке или в куче?Если я создам set и добавлю 5 миллионов строк, придется ли мне беспокоиться о переполнении стека?

Это было полезно?

Решение

Классы STL по умолчанию выделяют свои внутренние буферы из кучи, хотя эти классы также допускают пользовательские распределители, которые позволяют пользователю указывать альтернативное местоположение для выделения - напримеробщий пул памяти.

Другие советы

Распределитель по умолчанию для контейнеров STL использует операторы new и delete, так что это то, к чему они направляются для содержащегося типа.(Как правило, это происходит из кучи, если вы не сделаете что-то, чтобы переопределить это.)

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

Сам контейнер выделяется там, где вы решите (это может быть стек, куча, элемент объекта и т.д.), Но используемая им память по умолчанию, как описывали другие, берется из бесплатного хранилища (управляется через new и delete), что не совпадает с кучей (управляется через malloc / free).

Не смешивайте эти два понятия!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top