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
}