Go

Gestión de memoria

Stack vs heap, escape analysis, garbage collector, profiling de memoria, pprof, memory leaks

24 preguntas de entrevista·
Senior
1

¿Cuál es la diferencia principal entre la asignación en la stack y la asignación en el heap en Go?

Respuesta

La stack se gestiona automáticamente y las asignaciones son extremadamente rápidas (simple movimiento del stack pointer). Las variables en la stack se liberan automáticamente cuando la función retorna. El heap requiere el garbage collector para liberar memoria y las asignaciones son más lentas porque involucran el runtime de Go. Las variables que sobreviven más allá de la función o cuyo tamaño no se conoce en tiempo de compilación van al heap.

2

¿Qué es el escape analysis en Go?

Respuesta

El escape analysis es un análisis estático realizado por el compilador de Go para determinar si una variable puede permanecer en la stack o debe asignarse en el heap. Si el compilador detecta que una variable es referenciada fuera de su función de creación (mediante un puntero retornado, almacenamiento en una variable global, etc.), la variable 'escapa' y será asignada en el heap. Este análisis optimiza automáticamente las asignaciones de memoria.

3

¿Cómo ver los resultados del escape analysis durante la compilación?

Respuesta

El flag -gcflags=-m permite ver las decisiones del escape analysis. Usar -m=2 o -m=3 proporciona más detalles sobre por qué una variable escapa. Por ejemplo 'go build -gcflags=-m=2' mostrará mensajes como 'moved to heap: x' para indicar que una variable fue movida al heap. Esta herramienta es esencial para optimizar las asignaciones de memoria en código crítico.

4

¿En qué caso una variable local escapa al heap?

5

¿Cuál es el rol principal del garbage collector en Go?

+21 preguntas de entrevista

Domina Go para tu próxima entrevista

Accede a todas las preguntas, flashcards, tests técnicos, ejercicios de code review y simuladores de entrevista.

Empieza gratis