Sobes.tech
Junior — Middle

Jak przebiega konwersja długości slice na jego faktyczny rozmiar w pamięci?

sobes.tech AI

Odpowiedź od AI

W Go, slice to struktura zawierająca:

  • wskaźnik na tablicę,
  • długość (len),
  • pojemność (cap).

Długość slice'a to liczba elementów, które zawiera, a faktyczny rozmiar w pamięci zależy od pojemności i rozmiaru typu elementów.

Na przykład, jeśli masz slice typu int (zwykle 8 bajtów na element) o długości 5 i pojemności 10, to w pamięci zarezerwowane jest miejsce na 10 elementów (80 bajtów), mimo że długość to 5.

Rozmiar slice'a w pamięci = sizeof(elementu) * cap.

Kod demonstracyjny:

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