Sobes.tech
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.