Sobes.tech
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)))
}