Sobes.tech
Junior — Middle

Quais são os tipos de memória existentes e como eles interagem entre si?

sobes.tech IA

Resposta da IA

Em Go (Golang), os principais tipos de memória e a sua interação são os seguintes:

  • Stack (Pilha) — armazena variáveis locais de funções. A pilha é rapidamente alocada e libertada ao chamar e retornar de funções.

  • Heap (Montão) — usado para alocação dinâmica de memória, por exemplo, para objetos que vivem além da função atual. Go possui um coletor de lixo que gere a limpeza do montão.

  • Memória global/estática — para variáveis e constantes globais.

Interação:

  • Ao chamar uma função, as variáveis locais são colocadas na pilha.
  • Se uma variável deve viver mais, o compilador pode "mover" ela para o montão (análise de escape).
  • O coletor de lixo liberta automaticamente a memória no montão quando os objetos se tornam inalcançáveis.

Exemplo:

func foo() *int {
    x := 10
    return &x // x "foge" para o montão, pois é devolvido um ponteiro
}

Aqui, a variável x será colocada no montão para que o ponteiro permaneça válido após a saída da função.