Стек и куча

Anonim

Управление памятью является фундаментальным явлением операционной системы, используемой для обработки или управления первичной памятью, чтобы контролировать права доступа к памяти на компьютере. Цель состоит в том, чтобы предотвратить доступ любого процесса к памяти, которая еще не была ему выделена.

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

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

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

Что такое стек?

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

Что такое куча?

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

Разница между стеком и кучей

Значение стека и кучи

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

Распределение памяти для стека и кучи

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

Доступ к стеку и куче

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

Переменные в стеке и куче

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

Стек против кучи: сравнительная таблица

Резюме стека против кучи

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