Sobes.tech
Junior — Middle

Чӣ гуна табдил додани дарозии slice ба андозаи воқеии он дар хотира сурат мегирад?

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