Middle
Jak se mění kapacita plátku při jeho rozšíření?
sobes.tech AI
Odpověď od AI
V jazyce Go je řez (slice) struktura, která obsahuje ukazatel na pole, délku a kapacitu. Při přidávání prvků pomocí append se, pokud délka řezu dosáhne jeho aktuální kapacity, provádí přerozdělení paměti: je vytvořen nové pole s navýšenou kapacitou a data jsou do něj zkopírována.
Pravidla pro změnu kapacity nejsou striktně stanovena, ale obvykle:
- U malých řezů (do 1024 prvků) se kapacita zdvojnásobí.
- U větších řezů je nárůst konzervativnější (zhruba 25 % aktuální kapacity).
To umožňuje vyvážit mezi frekvencí alokací a využitím paměti.
Příklad:
s := make([]int, 0, 2) // délka 0, kapacita 2
s = append(s, 1) // délka 1, kapacita 2
s = append(s, 2) // délka 2, kapacita 2
s = append(s, 3) // délka 3, kapacita se zvětší, například na 4
Tímto způsobem kapacita řezu exponenciálně roste při rozšiřování, což optimalizuje výkon při přidávání prvků.