Senior
Quando um slice é redeclarado dentro de uma função ao ultrapassar a capacidade — ele é declarado no heap ou na pilha?
sobes.tech IA
Resposta da IA
Em Go, um slice é uma estrutura que contém um ponteiro para um array, um comprimento e uma capacidade. Quando adicionas elementos e ultrapassas a capacidade atual do slice, um novo array com maior capacidade é alocado.
Este novo array é alocado no heap, não na pilha, porque o seu tamanho e tempo de vida não podem ser determinados em tempo de compilação. Depois disso, o slice dentro da função aponta para este novo array no heap.
Exemplo:
func appendElement(s []int, val int) []int {
s = append(s, val) // se a capacidade não for suficiente, um novo array é alocado no heap
return s
}
Assim, ao ultrapassar a capacidade, o slice é reatribuído com um novo array que fica no heap.