Back to questions
Junior — Middle
80
Каким образом происходит преобразование длины слайса в его фактический размер в памяти?
Companies where asked
Rubytech
Answer from AI
sobes.tech 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)))
}