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