Sobes.tech
Junior — Middle

Wie erfolgt die Umwandlung der Slice-Länge in ihre tatsächliche Größe im Speicher?

sobes.tech KI

Antwort von AI

In Go ist ein Slice eine Struktur, die enthält:

  • einen Zeiger auf ein Array,
  • die Länge (len),
  • die Kapazität (cap).

Die Länge des Slices ist die Anzahl der Elemente, die es enthält, und die tatsächliche Größe im Speicher hängt von der Kapazität und der Größe des Elementtyps ab.

Zum Beispiel, wenn Sie ein Slice von int (normalerweise 8 Byte pro Element) mit einer Länge von 5 und einer Kapazität von 10 haben, ist im Speicher Platz für 10 Elemente (80 Byte) reserviert, obwohl die Länge 5 ist.

Größe des Slices im Speicher = sizeof(Element) * cap.

Democode zur Demonstration:

package main
import (
    "fmt"
    "unsafe"
)
func main() {
    s := make([]int, 5, 10)
    fmt.Println("len:", len(s))
    fmt.Println("cap:", cap(s))
    fmt.Println("size in bytes:", unsafe.Sizeof(s[0])*uintptr(cap(s)))
}