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