Middle
Wie ändert sich die Kapazität eines Slices bei seiner Erweiterung?
sobes.tech KI
Antwort von AI
In Go ist ein Slice eine Struktur, die einen Zeiger auf ein Array, eine Länge und eine Kapazität enthält. Beim Hinzufügen von Elementen mit append wird, wenn die Länge des Slices die aktuelle Kapazität erreicht, eine Speicherneuallokation durchgeführt: Es wird ein neues Array mit vergrößerter Kapazität erstellt und die Daten werden hineinkopiert.
Die Regeln für die Änderung der Kapazität sind nicht strikt festgelegt, aber in der Regel:
- Für kleine Slices (bis zu 1024 Elemente) verdoppelt sich die Kapazität.
- Für größere Slices wird der Zuwachs konservativer (etwa 25% der aktuellen Kapazität).
Dies ermöglicht eine Balance zwischen der Häufigkeit von Allokationen und der Speichernutzung.
Beispiel:
s := make([]int, 0, 2) // Länge 0, Kapazität 2
s = append(s, 1) // Länge 1, Kapazität 2
s = append(s, 2) // Länge 2, Kapazität 2
s = append(s, 3) // Länge 3, die Kapazität erhöht sich, z.B. auf 4
Auf diese Weise wächst die Kapazität des Slices exponentiell beim Erweitern, was die Leistung beim Hinzufügen von Elementen optimiert.