Junior — Middle
Como são armazenados na memória os tamanhos e volumes de reserva dos cortes na linguagem de programação?
sobes.tech IA
Resposta da IA
Na linguagem Go, um slice é uma estrutura que contém três campos principais:
- Ponteiro para o array — o endereço do primeiro elemento do slice na memória.
- Comprimento (len) — a quantidade de elementos acessíveis para leitura.
- Capacidade (cap) — a quantidade máxima de elementos que o slice pode conter sem alocar nova memória.
Na memória, um slice é representado aproximadamente assim:
type SliceHeader struct {
Data uintptr // ponteiro para o array
Len int // comprimento do slice
Cap int // capacidade do slice
}
Ao criar um slice, um array com uma capacidade definida é alocado. Se ao adicionar elementos o comprimento exceder a capacidade, um novo array de maior tamanho é alocado e os dados são copiados para lá.
A reserva de capacidade (capacity) permite gerenciar a memória de forma eficiente, reduzindo as alocações ao crescer o slice.
Exemplo:
s := make([]int, 3, 5) // len=3, cap=5
s = append(s, 4) // len=4, cap=5
s = append(s, 5) // len=5, cap=5
s = append(s, 6) // len=6, cap=10 (nova memória alocada)
Dessa forma, os tamanhos e capacidades reservadas dos slices são armazenados na estrutura do slice e gerenciados automaticamente durante a execução.