2016-02-16 3 views
-5

Есть ли проблемы при использовании стека вместо кучи?Разница между использованием стека или кучи

В основном я хочу около 200 позиций в памяти (или больше, 1000, кто знает, что это гипотетическое в любом случае), я могу передать его в стеке, используя массив, или в куче с использованием malloc(). В куче я должен помнить всегда free() памяти ... но, используя стек, как только функция вернется, вся память будет хорошо очищена для меня.

Мне просто интересно, есть ли проблемы с хранением больших объемов памяти в стеке. Насколько я знаю, стек и куча в основном одинаковы, просто они сидят на противоположных сторонах в ОЗУ, и они растут по направлению к другому, как на изображении ниже.

Stack and Heap

+3

Площадь стека ограничена. Если вы не знаете, сколько хотите, просто используйте 'vector' (C++) и не беспокойтесь об управлении памятью. – NathanOliver

+0

Не так ли ограничено, как куча? Поскольку оба растут до одного и того же зарезервированного пространства – mFeinstein

+0

Почему стремление к downvote ??????????? Серьезно люди, мы понижаем, если на языке вопроса что-то не так, а не на вопрос ..... – mFeinstein

ответ

-3

Главная «проблема» с использованием стека - жизни, что переменные, контролируемые выполнения потока не разработчиком. Хотя проще, когда переменные автоматически уничтожаются, когда они выходят из области действия, в некоторых случаях необходимо и проще иметь данные, которые управляются временем разработчиком, а не компилятором. Другая проблема - на стандартном C++ вы можете выделять только данные на стек, размер которых известен во время компиляции, что не относится к куче.

+0

Да, я знаю, и именно поэтому я предпочитаю использовать стек, чтобы избежать управления памятью, когда это возможно, конечно ... но мой вопрос не в том, как они работают, но если есть какие-либо побочные эффекты от использования стека когда куча обычно используется, например, для хранения больших объемов данных. – mFeinstein

+2

Я думаю, что анонимные downvoters скоро разрушат сообщество здесь. – Slava

+0

Я согласен ........ – mFeinstein

1

Прежде всего - куча и стопка не являются c++ условиями. Это детали реализации.

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

Однако стек имеет преимущества над кучей, поэтому используйте его, когда можете, при условии, что вы не ставите огромные переменные в стек.

Уведомление - это большинство контейнеров C++, например. вектор, список, deque, могут быть помещены в стек без проблем, потому что они кладут только несколько байтов в стек и выделяют реальный контейнер данных в куче.

+0

Да, я знаю, но, насколько я мог видеть, стек будет переполняться так же, как куча будет переполняться .... но после комментариев, теперь я знаю упрощенную модель обмена памятью больше не используется. – mFeinstein

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