Junior — Middle
A quantidade de memória disponível ou a capacidade muda ao diminuir o tamanho de um slice na linguagem de programação?
sobes.tech IA
Resposta da IA
Na linguagem Go, um slice é uma estrutura que contém um ponteiro para um array, um comprimento e uma capacidade.
Ao reduzir o comprimento do slice (por exemplo, usando slice = slice[:newLength]), apenas o comprimento é alterado — a quantidade de elementos disponíveis para leitura e escrita. A capacidade e a memória alocada permanecem as mesmas, pois o slice ainda faz referência ao mesmo array.
Se desejar reduzir a capacidade e liberar memória, é necessário criar um novo slice e copiar os elementos necessários para ele, por exemplo:
oldSlice := []int{1, 2, 3, 4, 5}
newSlice := make([]int, 3)
copy(newSlice, oldSlice[:3])
Dessa forma, reduzir o comprimento do slice não altera a capacidade nem a memória alocada, portanto, a memória não é liberada automaticamente.