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