Junior — Middle
Ao passar dados para uma função: qual é mais eficiente em termos de uso de memória — um array ou um slice?
sobes.tech IA
Resposta da IA
Em Go, os arrays têm um tamanho fixo e são armazenados completamente na memória, enquanto os slices são uma estrutura que contém um ponteiro para um array, um comprimento e uma capacidade.
Do ponto de vista do uso de memória:
- Array: ocupa exatamente a memória para todos os elementos, o tamanho é conhecido em tempo de compilação.
- Slice: por si só, ocupa pouco memória (três palavras: ponteiro, comprimento, capacidade), mas aponta para um array que armazena os dados.
Ao passá-los para uma função:
- Se passar um array, ele é copiado por completo, o que pode ser custoso em memória e tempo para tamanhos grandes.
- Se passar um slice, apenas a estrutura do slice (ponteiro + comprimento + capacidade) é copiada, e os dados permanecem no array original, portanto, não há cópia de dados.
Portanto, passar um slice é mais eficiente em termos de uso de memória e desempenho, especialmente para conjuntos de dados grandes.
Exemplo:
func processArray(arr [1000]int) {
// copia todo o array
}
func processSlice(s []int) {
// apenas copia a estrutura do slice
}
func main() {
var a [1000]int
processArray(a) // custoso
processSlice(a[:]) // eficiente
}