Sobes.tech
Junior — Middle

Ինչպե՞ս է տեղի ունենում slice-ի երկարության փոխարկումը նրա իրական չափի մեջ հիշողության մեջ:

sobes.tech AI

Պատասխան AI-ից

Go լեզվում, սլայսը (slice) կառուցվածք է, որը պարունակում է.

  • ցուցիչ զանգվածի վրա,
  • երկարություն (len),
  • կարողություն (cap):

Սլայսի երկարությունը այն տարրերի քանակն է, որոնք այն պարունակում է, իսկ իրական չափը հիշողության մեջ կախված է կարողությունից և տարրերի տիպի չափից:

Օրինակ, եթե ունեք int տիպի սլայս (հաճախ 8 բայթ յուրաքանչյուր տարրին) երկարությամբ 5 և կարողությամբ 10, ապա հիշողության մեջ հատկացված է տեղ 10 տարրերի համար (80 բայթ), չնայած երկարությունը 5 է:

Սլայսի չափը հիշողության մեջ = sizeof(տիպ) * cap:

Ցուցադրական կոդ:

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