Ссылка на основе стека является альтернативой ссылке на основе кучи. Как правило, возвращаемые значения и значения локальных переменных размещаются в «стеке вызовов», в котором хранится последовательность выполняемых в данный момент функций.
Как правило, когда вы вызываете функцию, в стек помещается «кадр стека», включая достаточно места для всех локальных переменных, аргументов и возвращаемого значения функции. Находясь в этой функции, этот стек стека остается живым вместе со всеми его значениями; когда функция завершается, кадр стека обычно отбрасывается, и вы возвращаетесь на следующий уровень вверх.
В этом случае «abc» входит в кадр стека для f (), но c ++ достаточно умен, чтобы разместить его прямо рядом с кадром стека родителя; когда f () извлекается из стека, кадр стека для g () (который находится непосредственно ниже f () в стеке, так как g () с именем f ()) настраивается так, чтобы зависать со значением "abc".
Это описывает объекты, расположенные в стеке; альтернатива - объекты в куче, которые являются постоянными. Объекты в куче управляются с использованием 'new' и 'delete' и удерживаются на месте указателями или ссылками кучи. Стек объектов автоматически освободится, когда вы закончите с функцией; объекты в куче должны быть освобождены вручную.