Sobes.tech
Junior — Middle

Sob que condições ocorre a alocação automática de memória a partir da área dinâmica durante a compilação ou execução do programa?

sobes.tech IA

Resposta da IA

Em Go, a alocação automática de memória do heap ocorre durante a execução do programa, quando o compilador ou o runtime determinam que uma variável deve viver além da função ou goroutine atual.

Condições em que ocorre a alocação no heap:

  • Se a variável é capturada por um closure e pode ser usada após a saída da função.
  • Se a variável é retornada pela função ou passada para outra goroutine.
  • Se o compilador não consegue garantir que a variável será destruída após sair do escopo atual.

O compilador Go realiza uma análise de escape para determinar quais variáveis devem ser colocadas no heap e quais na pilha.

Exemplo:

func f() *int {
    x := 10
    return &x // x "escapa" para o heap, pois um ponteiro é retornado
}

Aqui, x é alocado no heap porque um ponteiro para ela é retornado e pode ser usado fora de seu escopo.