Стек и куча в С++

НаименованиеСтек (Stack)Куча (Heap) «free store», «свободное хранилище»
Размещение элементов В ОЗУ, все элементы стека расположены один за другим в одной выделенной области памяти - стеке. В ОЗУ, элементы кучи могут быть разбросаны по всей памяти
Ограничения размера памяти Размер стека ограничен ОС и компилятором (обычно единицы мегабайт) Размер кучи ограничен доступной физической памятью
Скорость доступа к элементам У стека быстрая скорость доступа к элементам (элементы идут один за другим) У кучи медленная скорость доступа к элементам (требуется разыменование указателя, элементы могут быть разбросаны по разным сегментам памяти)
Доступ к элементам У стека доступ к элементам по принципу LIFO (последний пришел - первый ушел, аналогия со стопкой тарелок или пачкой бумаги).
Элементы добавляются/удаляются и считываются из вершины стека. Возможно считать элемент не из вершины стека (указывается индекс отступа от вершины стека)
У кучи произвольный доступ к элементам.
Объекты хранения Стек вызова функций (адреса возврата, содержание регистров процессора, аргументы функции, локальные переменные функции и т.д.).
Переменные и объекты созданные внутри функции (кроме динамических) будут размещены в стеке, в противном случае - в куче.
При рекурсии будет сохранено столько раз в стеке сколько вызывается рекурсивных функций.
Динамические объекты (созданные new или malloc)

Стек
2023-11-22



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

alignas спецификатор выравнивания данных в памяти С++
alignof оператор С++11 возвращает количество байт требуемых для выравнивания типа данных
nullptr C++ значение для нулевого указателя
Стек и куча в С++