Junior — Middle
Beim Übergeben von Daten an eine Funktion: Was ist speichereffizienter – ein Array oder ein Slice?
sobes.tech KI
Antwort von AI
In Go haben Arrays eine feste Größe und werden vollständig im Speicher gespeichert, während Slices eine Struktur sind, die einen Zeiger auf ein Array, eine Länge und eine Kapazität enthält.
Aus Sicht der Speichernutzung:
- Array: beansprucht genau den Speicher für alle Elemente, die Größe ist zur Kompilierungszeit bekannt.
- Slice: selbst benötigt nur wenig Speicher (drei Wörter: Zeiger, Länge, Kapazität), zeigt aber auf ein Array, das die Daten speichert.
Beim Übergabe an eine Funktion:
- Wenn ein Array übergeben wird, wird es vollständig kopiert, was bei großen Arrays speicher- und zeitaufwändig sein kann.
- Wenn ein Slice übergeben wird, wird nur die Slice-Struktur (Zeiger + Länge + Kapazität) kopiert, die Daten verbleiben im ursprünglichen Array, es findet keine Datenkopie statt.
Daher ist die Übergabe eines Slices effizienter in Bezug auf Speicherverbrauch und Leistung, besonders bei großen Datenmengen.
Beispiel:
func processArray(arr [1000]int) {
// das ganze Array wird kopiert
}
func processSlice(s []int) {
// nur die Slice-Struktur wird kopiert
}
func main() {
var a [1000]int
processArray(a) // teuer
processSlice(a[:]) // effizient
}