Sobes.tech
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ů.