Sobes.tech
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)))
}