Sobes.tech
Junior — Middle

Hogyan történik a szelet hosszának átalakítása a memória szerinti tényleges méretre?

sobes.tech MI

Válasz az MI-től

Go-ban a szelet (slice) egy olyan szerkezet, amely tartalmaz:

  • egy mutatót egy tömbre,
  • a hosszát (len),
  • a kapacitását (cap).

A szelet hosszúsága az elemek számát jelenti, amelyeket tartalmaz, és a memória tényleges mérete a kapacitástól és az elemtípus méretétől függ.

Például, ha van egy int típusú szelet (általában 8 byte elemenként) hosszúsága 5 és kapacitása 10, akkor a memóriában hely van foglalva 10 elem számára (80 byte), bár a hossz 5.

A szelet memória mérete = sizeof(elem) * cap.

Demonstrációs kód:

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