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