Junior — Middle
Cum are loc conversia lungimii slice-ului în dimensiunea sa reală în memorie?
sobes.tech AI
Răspuns de la AI
În Go, un slice este o structură care conține:
- un pointer către un array,
- lungimea (len),
- capacitatea (cap).
Lungimea slice-ului este numărul de elemente pe care le conține, iar dimensiunea reală în memorie depinde de capacitate și de dimensiunea tipului elementelor.
De exemplu, dacă aveți un slice de int (de obicei 8 bytes pe element) cu lungimea 5 și capacitatea 10, atunci în memorie este rezervat spațiu pentru 10 elemente (80 bytes), chiar dacă lungimea este 5.
Dimensiunea slice-ului în memorie = sizeof(element) * cap.
Cod de demonstrație:
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)))
}