Sobes.tech
Junior — Middle

Como ocorre a conversão do comprimento do slice para o seu tamanho real na memória?

sobes.tech IA

Resposta da IA

No Go, um slice é uma estrutura que contém:

  • um ponteiro para um array,
  • o comprimento (len),
  • a capacidade (cap).

O comprimento do slice é o número de elementos que ele contém, e o tamanho real na memória depende da capacidade e do tamanho do tipo de elementos.

Por exemplo, se você tem um slice de int (normalmente 8 bytes por elemento) com comprimento 5 e capacidade 10, então na memória é reservado espaço para 10 elementos (80 bytes), embora o comprimento seja 5.

Tamanho do slice na memória = sizeof(elemento) * cap.

Código de demonstração:

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