Введение в память стека

Опубликовано: 15 Февраля, 2023

Что такое стековая память?

The stack is a segment of memory that stores temporary variables created by a function. In stack, variables are declared, stored and initialized during runtime.

Когда мы компилируем программу, компилятор заходит через функцию main и в стеке создается кадр стека. Структура, также известная как запись активации, представляет собой набор всех данных в стеке, связанных с одним вызовом подпрограммы. Основная функция и все локальные переменные хранятся в начальном кадре.

Это временное запоминающее устройство. Когда вычислительная задача будет завершена, память переменной будет автоматически стерта. Раздел стека в основном содержит методы, локальные переменные и ссылочные переменные.

Преимущества стековой памяти:

  • Это помогает нам управлять данными в методе «последним пришел — первым вышел» (LIFO), что невозможно при использовании связанного списка и массива.
  • Когда вызывается функция, локальные переменные сохраняются в стеке и автоматически освобождаются после возврата.
  • Стек используется, когда переменная не используется вне этой функции.
  • Это позволяет вам контролировать, как память выделяется и освобождается.
  • Стек автоматически очищает объект.
  • Его нелегко испортить
  • Переменные, объявленные один раз, не могут быть изменены.

Недостатки стековой памяти:

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

Пример создания памяти в стеке:

Очки, чтобы помнить:

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