{}const=>[]async()letfn</>var
Desarrollo

Memoria en Go: cómo funciona el análisis de escape y a dónde van las variables

Analizamos la pila y el montón en Go con ejemplos: por qué algunas variables solo viven dentro de una función y otras se escapan al montón.

К

Kodik

Autor

3 min de lectura

Go es un lenguaje que a menudo se describe como sencillo y rápido. Pero bajo el capó hace un montón de magia, especialmente cuando se trata de trabajar con la memoria. Comprender dónde y cómo se almacenan los datos puede ayudarte a escribir un código más eficiente, evitar asignaciones innecesarias y comprender mejor el comportamiento del programa.

Pila y montón: conceptos básicos

  • Pila (stack) - memoria que funciona según el principio LIFO (último en entrar, primero en salir). Las variables viven hasta que se sale de la función. Trabajar con una pila es rápido y casi gratis.

  • Montón (heap) - área de memoria para objetos cuya vida útil no se puede determinar de antemano. Gestionado por el recolector de basura (GC). Las asignaciones son más caras y la recolección puede ralentizar el programa.

La diferencia principal: en la pila, la memoria se libera automáticamente al salir de la función, y en el montón, el GC se encarga de ello.

🔥 100.000+ estudiantes ya están con nosotros

¿Cansado de leer teoría?
¡Hora de programar!

Kodik — una app donde aprendes a programar con práctica. Mentor IA, lecciones interactivas, proyectos reales.

🤖 IA 24/7
🎓 Certificados
💰 Gratis
🚀 Empezar
Se unieron hoy

Escape analysis: ¿quién escapó en grupo?

Cuando el compilador de Go encuentra una variable, decide dónde almacenarla, en la pila o en el montón. Este proceso se llama escape analysis.

Si la variable "se escapa" fuera de la función, se envía a la pila. Si no, permanece en la pila.

Ejemplo 1. Variable local (permanece en la pila)

func sum(a, b int) int {
    c := a + b
    return c
}

Ejemplo 2. La variable se va al montón

func makePointer() *int {
    x := 42
    return &x
}

Aquí x vuelve por el puntero. Después de salir de la función, la pila se borrará y el valor se perderá. Por lo tanto, x "huye" al montón para seguir viviendo.

Comprobamos el análisis de escape

go build -gcflags="-m" main.go

Ejemplo de salida:

./main.go:5:6: moved to heap: x

¿Cuándo se amontonan las variables?

  • Regresan de la función por el puntero.

  • Se guardan en el cierre.

  • Se transmiten a la interfaz (a veces).

  • El tamaño de la estructura es demasiado grande para caber en la pila.

Ejemplo 3. Cierre

func adder() func(int) int {
    sum := 0
    return func(x int) int {
        sum += x
        return sum
    }
}

Aquí sum se almacena en una pila porque es necesario que viva más tiempo que la función adder.

Pila vs. montón en la práctica

Características

Pila

Montón

Tiempo de vida

Mientras se ejecuta la función

Antes del montaje de GC

Velocidad de acceso

Muy rápida

Más lento

Control

Automático

Recogedor de basura

Dónde se almacenan

Variables locales

Punteros, ciclos, objetos de larga duración

Cómo escribir código eficaz

  • Evite los indicadores innecesarios. Cuantos más indicadores haya, mayor será la posibilidad de que se amontonen.

  • Si es posible, utilice valores en lugar de enlaces.

  • Sigue el análisis de escape. A veces Go asigna memoria en la pila, aunque parece que no es necesario.

  • No tengas miedo de los montones demasiado grandes. La optimización es importante, pero la optimización prematura es mala.

Total

Comprender dónde se almacenan los datos en Go te permite escribir un código más eficiente. Escape analysis es una herramienta que decide el destino de cada variable. Y conociendo sus reglas, puedes evitar frenos inesperados debido a asignaciones innecesarias en la pila.

En Codice hay un curso completo sobre Go, desde los conceptos básicos hasta los temas avanzados. Analizamos la sintaxis, el trabajo con la memoria, la competitividad y escribimos miniproyectos que ayudarán a consolidar el conocimiento.

Y también tenemos un canal de telegram, donde discutimos ideas geniales, compartimos experiencias y analizamos juntos las tareas: aprender no solo es útil, sino también divertido.

🎯Deja de postergar

¿Te gustó el artículo?
¡Hora de practicar!

En Kodik no solo lees — escribes código de inmediato. Teoría + práctica = habilidades reales.

Práctica instantánea
🧠IA explica código
🏆Certificado

Sin registro • Sin tarjeta