2013-06-19 10 views
0

Из того, что я узнал о распределении динамической памяти, куча, похоже, представляет собой обильный пул памяти, который вы можете использовать столько, сколько хотите. Мой вопрос: почему бы вам просто не использовать кучу переменных и объектов и забыть о стеке?Зачем использовать стек? Почему бы просто не куча? - C/C++

+0

Быстрый Google появился, например: http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html - несколько хороших плюсов и минусов, перечисленных для стека против кучи. – faffaffaff

+1

На самом деле есть аналогия: зачем писать кучу отдельных функций и называть их «главными»? Почему бы просто не написать весь код в 'main'? – jxh

+0

См. [Этот пост] (http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap?rq=1) для справок о 'Stack' и' Heap '. –

ответ

3

Распределение в стеке «бесплатно» с точки зрения производительности. Распределение кучи относительно дорого.

Кроме того, концептуально это позволяет легко отбрасывать объекты сразу после выхода из сферы действия.

0
  • Стек может сохранить пространство
    • Мы используем кучу в первую очередь, когда мы хотим контролировать время жизни объекта, выделяя временный буфер на динамической памяти, которая не используется после окончания функции (скажем) отходы память кучи, которую можно использовать повторно.

  • Стек может быть быстрее, чем кучи
    • Процесс выделения памяти в стеке постоянна (несколько машинных команд, вставленных компилятором во время связывания) и быстро. Распределение памяти в куче происходит медленнее (вызов функции glibc и процедура поиска), особенно если она фрагментирована.

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

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