Sobes.tech
Junior — Middle

Slice uzunluğunun yaddaşdakı faktiki ölçüsünə çevrilməsi necə baş verir?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, dilim (slice) aşağıdakı strukturu ehtiva edir:

  • massivə göstərici,
  • uzunluq (len),
  • tutum (cap).

Dilim uzunluğu onun içində olan elementlərin sayıdır və yaddaşdakı faktiki ölçüsü tutum və elementlərin tipinin ölçüsündən asılıdır.

Məsələn, əgər sizdə int tipindən olan dilim (adətən 8 bayt hər element üçün) uzunluğu 5 və tutumu 10-dursa, yaddaşda 10 element üçün yer ayrılmışdır (80 bayt), halbuki uzunluğu 5-dir.

Yaddaşdakı dilim ölçüsü = sizeof( element ) * cap.

Demonstraiya kodu:

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