Sobes.tech
Junior — Middle

Come avviene la conversione della lunghezza dello slice nella sua dimensione effettiva in memoria?

sobes.tech AI

Risposta dell'AI

In Go, uno slice è una struttura che contiene:

  • un puntatore a un array,
  • la lunghezza (len),
  • la capacità (cap).

La lunghezza dello slice è il numero di elementi che contiene, e la dimensione effettiva in memoria dipende dalla capacità e dalla dimensione del tipo di elemento.

Ad esempio, se hai uno slice di int (di solito 8 byte per elemento) con lunghezza 5 e capacità 10, allora in memoria è riservato spazio per 10 elementi (80 byte), anche se la lunghezza è 5.

La dimensione dello slice in memoria = sizeof(elemento) * cap.

Codice di esempio:

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)))
}