Go

Gerenciamento de memória

Stack vs heap, escape analysis, garbage collector, profiling de memória, pprof, memory leaks

24 perguntas de entrevista·
Senior
1

Qual é a principal diferença entre a alocação na stack e a alocação no heap em Go?

Resposta

A stack é gerenciada automaticamente e as alocações são extremamente rápidas (simples movimento do stack pointer). As variáveis na stack são liberadas automaticamente quando a função retorna. O heap requer o garbage collector para liberar memória e as alocações são mais lentas porque envolvem o runtime do Go. As variáveis que sobrevivem além da função ou cujo tamanho não é conhecido em tempo de compilação vão para o heap.

2

O que é o escape analysis em Go?

Resposta

O escape analysis é uma análise estática realizada pelo compilador do Go para determinar se uma variável pode permanecer na stack ou deve ser alocada no heap. Se o compilador detecta que uma variável é referenciada fora de sua função de criação (via um ponteiro retornado, armazenamento em uma variável global, etc.), a variável 'escapa' e será alocada no heap. Essa análise otimiza automaticamente as alocações de memória.

3

Como ver os resultados do escape analysis durante a compilação?

Resposta

A flag -gcflags=-m permite ver as decisões do escape analysis. Usar -m=2 ou -m=3 fornece mais detalhes sobre por que uma variável escapa. Por exemplo 'go build -gcflags=-m=2' exibirá mensagens como 'moved to heap: x' para indicar que uma variável foi movida para o heap. Essa ferramenta é essencial para otimizar as alocações de memória em código crítico.

4

Em qual caso uma variável local escapa para o heap?

5

Qual é o papel principal do garbage collector em Go?

+21 perguntas de entrevista

Domine Go para sua proxima entrevista

Acesse todas as perguntas, flashcards, testes tecnicos, exercicios de code review e simuladores de entrevista.

Comece gratis