
Gestión de memoria
Stack vs heap, escape analysis, garbage collector, profiling de memoria, pprof, memory leaks
1¿Cuál es la diferencia principal entre la asignación en la stack y la asignación en el heap en Go?
¿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?
¿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?
¿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.
¿En qué caso una variable local escapa al heap?
¿Cuál es el rol principal del garbage collector en Go?
+21 preguntas de entrevista
Otros temas de entrevista Go
Fundamentos de Go
Estructuras de datos en Go
Interfaces en Go
Manejo de errores
Goroutines básicas
Channels
Go Modules
Servidor HTTP
Cliente HTTP
Codificación JSON
Database/SQL
Paquete context
Testing
Patrones de concurrencia
Primitivas de sincronización
Frameworks web de Go
Diseño de API REST
gRPC
Reflection
Optimización del rendimiento
Generics
Go Design Patterns
Microservices
Seguridad y autenticación
Docker & Containerization
Kubernetes Basics
Go Avanzado
Desarrollo de CLI
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