Sobes.tech
Junior — Middle

Jak dochází k převodu délky slice na její skutečnou velikost v paměti?

sobes.tech AI

Odpověď od AI

V jazyce Go je slice struktura, která obsahuje:

  • ukazatel na pole,
  • délku (len),
  • kapacitu (cap).

Délka slice je počet prvků, které obsahuje, a skutečná velikost v paměti závisí na kapacitě a velikosti typu prvků.

Například, pokud máte slice typu int (obvykle 8 bajtů na prvek) s délkou 5 a kapacitou 10, pak je v paměti rezervováno místo pro 10 prvků (80 bajtů), i když délka je 5.

Velikost slice v paměti = sizeof(prvek) * cap.

Ukázkový 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)))
}