Введение в память стека
Опубликовано: 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), что невозможно при использовании связанного списка и массива.
- Когда вызывается функция, локальные переменные сохраняются в стеке и автоматически освобождаются после возврата.
- Стек используется, когда переменная не используется вне этой функции.
- Это позволяет вам контролировать, как память выделяется и освобождается.
- Стек автоматически очищает объект.
- Его нелегко испортить
- Переменные, объявленные один раз, не могут быть изменены.
Недостатки стековой памяти:
- Память стека очень ограничена.
- Произвольный доступ невозможен.
- Создание слишком большого количества объектов в стеке может увеличить риск переполнения стека.
- Хранилище переменных будет перезаписано, что иногда приводит к неопределенному поведению функции или программы.
- Стек выйдет за пределы области памяти, что может привести к аварийному завершению.
Пример создания памяти в стеке:
Очки, чтобы помнить:
Он хранится в оперативной памяти компьютера точно так же, как куча. |
Он реализован со структурой данных стека. |
Память стека никогда не будет фрагментирована |
Он хранит локальные переменные и возвращает адреса, используемые для передачи параметров. |
Переменные, созданные в стеке, выйдут за пределы области видимости и будут автоматически освобождены. |
Переменные, созданные в стеке, можно использовать без указателей. |
Мы можем использовать стековую память для хранения данных, если точно знаем, сколько данных вам нужно выделить перед компиляцией и если они не слишком велики. |
Обычно он выделяет максимальные размеры, которые определяются во время выполнения программы. |
Некоторые проблемы, такие как переполнение стека, возникают, когда используется слишком много памяти стека (в основном из-за бесконечной или слишком глубокой рекурсии, значительных выделений). |