Middle
Como é que a capacidade da fatia muda ao expandir-se?
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. Ao adicionar elementos com append, se o comprimento do slice atingir sua capacidade atual, ocorre uma realocação de memória: um novo array com capacidade aumentada é criado e os dados são copiados para ele.
As regras para alterar a capacidade não são estritamente fixas, mas geralmente:
- Para slices pequenos (até 1024 elementos), a capacidade dobra.
- Para slices maiores, o aumento torna-se mais conservador (cerca de 25% da capacidade atual).
Isso permite equilibrar entre a frequência de alocações e o uso de memória.
Exemplo:
s := make([]int, 0, 2) // comprimento 0, capacidade 2
s = append(s, 1) // comprimento 1, capacidade 2
s = append(s, 2) // comprimento 2, capacidade 2
s = append(s, 3) // comprimento 3, a capacidade aumenta, por exemplo, para 4
Dessa forma, a capacidade do slice cresce exponencialmente ao expandir, o que otimiza o desempenho ao adicionar elementos.