Sobes.tech
Junior — Middle

¿Cómo se realiza la conversión de la longitud del slice a su tamaño real en memoria?

sobes.tech AI

Respuesta de la IA

En Go, un slice es una estructura que contiene:

  • un puntero a un array,
  • la longitud (len),
  • la capacidad (cap).

La longitud del slice es la cantidad de elementos que contiene, y el tamaño real en memoria depende de la capacidad y del tamaño del tipo de elementos.

Por ejemplo, si tienes un slice de int (normalmente 8 bytes por elemento) con una longitud de 5 y una capacidad de 10, entonces en memoria se reserva espacio para 10 elementos (80 bytes), aunque la longitud sea 5.

El tamaño del slice en memoria = sizeof(elemento) * cap.

Código para demostración:

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