Sobes.tech
Junior — Middle

Как се извършва преобразуването на дължината на слайса в неговия реален размер в паметта?

sobes.tech AI

Отговор от AI

В Go, слайс е структура, която съдържа:

  • указател към масив,
  • дължина (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)))
}