Sobes.tech
Senior

What is a stack and a heap? How do they differ? How can you tell where a variable is allocated?

sobes.tech AI

Answer from AI

The stack and heap are two different memory management methods in a program.

  • Stack — a memory area where local variables and function parameters are stored. Allocation and deallocation of memory happen automatically when entering and exiting functions. The stack operates on a LIFO (last in, first out) principle. The size of the stack is usually limited.

  • Heap — a memory area for dynamic allocation, where objects live as long as there are references to them. Memory management in the heap typically requires explicit freeing (in Go — garbage collection).

In Go, the compiler decides where to place a variable — on the stack or heap — based on its lifetime analysis (escape analysis). If a variable "escapes" the function (for example, a pointer to a local variable is returned), it is allocated on the heap.

To find out where a variable is allocated, you can use the compiler flag -gcflags='-m', which outputs escape analysis information:

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

The output will indicate which variables are placed on the heap and which on the stack.