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