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