Sobes.tech
Middle

Ako rastie kapacita slice pri rozšírení?

sobes.tech AI

Odpoveď od AI

V Go má slice vnútornú kapacitu (capacity), ktorá pri rozširovaní rastie. Keď sa pridá prvok a aktuálna kapacita nie je dostatočná, slice alokuje nový pole s navýšenou kapacitou, zvyčajne približne dvojnásobnou, aby minimalizoval počet alokácií.

Napríklad, ak má slice capacity=4, pri pridávaní piateho prvku sa vytvorí nový pole s capacity=8 a údaje sa tam skopírujú. Tento amortizovaný rast umožňuje efektívne spravovať pamäť a výkon.

Príklad:

s := make([]int, 0, 4)
for i := 0; i < 10; i++ {
    s = append(s, i)
    fmt.Printf("len=%d cap=%d\n", len(s), cap(s))
}

Výstup ukáže, ako sa kapacita približne zdvojnásobí, keď je to potrebné.