Junior — Middle
Hoe vindt de conversie van de lengte van de slice naar de daadwerkelijke grootte in het geheugen plaats?
sobes.tech AI
Antwoord van AI
In Go is een slice een structuur die bevat:
- een pointer naar een array,
- de lengte (len),
- de capaciteit (cap).
De lengte van de slice is het aantal elementen dat het bevat, en de feitelijke grootte in het geheugen hangt af van de capaciteit en het type van de elementen.
Bijvoorbeeld, als je een slice van int hebt (meestal 8 bytes per element) met lengte 5 en capaciteit 10, dan is er in het geheugen ruimte gereserveerd voor 10 elementen (80 bytes), hoewel de lengte 5 is.
Grootte van de slice in het geheugen = sizeof(element) * cap.
Demonstratiecode:
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)))
}