Что такое стек и куча (heap)? Чем они различаются? Как узнать, где выделена переменная?
Answer from AI
sobes.tech AI
Стек и куча — это два разных способа управления памятью в программе.
-
Стек (stack) — область памяти, где хранятся локальные переменные и параметры функций. Выделение и освобождение памяти происходит автоматически при входе и выходе из функций. Стек работает по принципу LIFO (последним вошёл — первым вышел). Размер стека обычно ограничен.
-
Куча (heap) — область памяти для динамического выделения, где объекты живут до тех пор, пока на них есть ссылки. Управление памятью в куче обычно требует явного освобождения (в Go — сборщик мусора).
В Go компилятор решает, где разместить переменную — в стеке или куче — на основе анализа её жизненного цикла (escape analysis). Если переменная «убегает» за пределы функции (например, возвращается указатель на локальную переменную), она выделяется в куче.
Чтобы узнать, где выделена переменная, можно использовать флаг компилятора -gcflags='-m', который выводит информацию об escape-анализе:
go build -gcflags='-m' yourfile.go
В выводе будет указано, какие переменные размещаются в куче, а какие — в стеке.