Junior — Middle
Při předávání dat do funkce: co je efektivnější z hlediska využití paměti — pole nebo řez?
sobes.tech AI
Odpověď od AI
V jazyce Go mají pole pevnou velikost a jsou plně uložena v paměti, zatímco slices jsou struktury, které obsahují ukazatel na pole, délku a kapacitu.
Z pohledu využití paměti:
- Pole: zabírá přesně tolik paměti pro všechny prvky, velikost je známa při kompilaci.
- Slice: sám o sobě zabírá málo paměti (tři slova: ukazatel, délka, kapacita), ale ukazuje na pole, které data ukládá.
Při předání do funkce:
- Pokud předáte pole, celé se zkopíruje, což může být nákladné na paměť a čas u velkých polí.
- Pokud předáte slice, zkopíruje se pouze struktura slice (ukazatel + délka + kapacita), data zůstávají v původním poli, nedochází ke kopírování dat.
Proto je předání slice efektivnější z hlediska využití paměti a výkonu, zejména u velkých datových sad.
Příklad:
func processArray(arr [1000]int) {
// kopíruje celé pole
}
func processSlice(s []int) {
// kopíruje pouze strukturu slice
}
func main() {
var a [1000]int
processArray(a) // nákladné
processSlice(a[:]) // efektivní
}