Sobes.tech
Junior — Middle

Kaip vyksta slice ilgio konvertavimas į jos faktinį dydį atmintyje?

sobes.tech AI

Atsakymas iš AI

Go kalba, sluoksnis (slice) yra struktūra, kuri apima:

  • nuorodą į masyvą,
  • ilgį (len),
  • talpą (cap).

Sluoksnio ilgis yra elementų skaičius, kuriuos jis turi, o faktinis dydis atmintyje priklauso nuo talpos ir elemento tipo dydžio.

Pavyzdžiui, jei turite int tipo sluoksnį (paprastai 8 baitai už elementą) su ilgiu 5 ir talpa 10, tada atmintyje yra rezervuota vieta 10 elementų (80 baitų), nors ilgis yra 5.

Sluoksnio dydis atmintyje = sizeof(elemento) * cap.

Demonstracinis kodas:

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