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