Middle
Hoe verandert de capaciteit van de plak bij uitbreiding?
sobes.tech AI
Antwoord van AI
In Go is een slice een structuur die een pointer naar een array, een lengte en een capaciteit bevat. Bij het toevoegen van elementen met append, als de lengte van de slice de huidige capaciteit bereikt, vindt er een geheugenherallocatie plaats: er wordt een nieuwe array met een vergrote capaciteit gemaakt en de gegevens worden daarin gekopieerd.
De regels voor het wijzigen van de capaciteit zijn niet strikt vastgelegd, maar meestal:
- Voor kleine slices (tot 1024 elementen) wordt de capaciteit verdubbeld.
- Voor grotere slices wordt de toename conservatiever (ongeveer 25% van de huidige capaciteit).
Dit maakt het mogelijk om een balans te vinden tussen de frequentie van allocaties en het gebruik van geheugen.
Voorbeeld:
s := make([]int, 0, 2) // lengte 0, capaciteit 2
s = append(s, 1) // lengte 1, capaciteit 2
s = append(s, 2) // lengte 2, capaciteit 2
s = append(s, 3) // lengte 3, de capaciteit wordt vergroot, bijvoorbeeld tot 4
Op deze manier groeit de capaciteit van de slice exponentieel bij uitbreiding, wat de prestaties bij het toevoegen van elementen optimaliseert.