Sobes.tech
Back to questions
Senior
2

Что такое стек и куча (heap)? Чем они различаются? Как узнать, где выделена переменная?

Companies where asked
Магнит Тех

Answer from AI

sobes.tech AI

Стек и куча — это два разных способа управления памятью в программе.

  • Стек (stack) — область памяти, где хранятся локальные переменные и параметры функций. Выделение и освобождение памяти происходит автоматически при входе и выходе из функций. Стек работает по принципу LIFO (последним вошёл — первым вышел). Размер стека обычно ограничен.

  • Куча (heap) — область памяти для динамического выделения, где объекты живут до тех пор, пока на них есть ссылки. Управление памятью в куче обычно требует явного освобождения (в Go — сборщик мусора).

В Go компилятор решает, где разместить переменную — в стеке или куче — на основе анализа её жизненного цикла (escape analysis). Если переменная «убегает» за пределы функции (например, возвращается указатель на локальную переменную), она выделяется в куче.

Чтобы узнать, где выделена переменная, можно использовать флаг компилятора -gcflags='-m', который выводит информацию об escape-анализе:

go build -gcflags='-m' yourfile.go

В выводе будет указано, какие переменные размещаются в куче, а какие — в стеке.