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.