Sobes.tech
Junior — Middle

Al pasar datos a una función: ¿qué es más eficiente en términos de uso de memoria: un array o un slice?

sobes.tech AI

Respuesta de la IA

En Go, los arreglos tienen un tamaño fijo y se almacenan completamente en la memoria, mientras que los slices son una estructura que contiene un puntero a un arreglo, una longitud y una capacidad.

Desde el punto de vista del uso de memoria:

  • Arreglo: ocupa exactamente la memoria para todos los elementos, el tamaño se conoce en tiempo de compilación.
  • Slice: en sí mismo ocupa poca memoria (tres palabras: puntero, longitud, capacidad), pero apunta a un arreglo que almacena los datos.

Al pasarlos a una función:

  • Si se pasa un arreglo, se copia por completo, lo cual puede ser costoso en memoria y tiempo para arreglos grandes.
  • Si se pasa un slice, solo se copia la estructura del slice (puntero + longitud + capacidad), y los datos permanecen en el arreglo original, por lo que no hay copia de datos.

Por lo tanto, pasar un slice es más eficiente en términos de uso de memoria y rendimiento, especialmente para conjuntos de datos grandes.

Ejemplo:

func processArray(arr [1000]int) {
    // se copia todo el arreglo
}

func processSlice(s []int) {
    // solo se copia la estructura del slice
}

func main() {
    var a [1000]int
    processArray(a)    // costoso
    processSlice(a[:]) // eficiente
}