Junior — Middle
Kā notiek slices garuma pārvēršana tās faktiskajā izmērā atmiņā?
sobes.tech AI
Atbilde no AI
Go valodā, šķēle (slice) ir struktūra, kas satur:
- norādi uz masīvu,
- garumu (len),
- ietilpību (cap).
Šķēles garums ir elementu skaits, ko tā satur, un faktiskais izmērs atmiņā ir atkarīgs no ietilpības un elementu tipa izmēra.
Piemēram, ja jums ir int tipa šķēle (parasti 8 baiti uz elementu) ar garumu 5 un ietilpību 10, tad atmiņā ir rezervēta vieta 10 elementiem (80 baiti), lai gan garums ir 5.
Šķēles izmērs atmiņā = sizeof(elementa) * cap.
Demonstrācijas kods:
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)))
}