La complejidad espacial mide cuánta memoria adicional requiere un algoritmo además de la entrada. En C es clave porque gestionamos manualmente el stack y el heap.
Cuenta los bytes necesarios para variables, estructuras y buffers auxiliares. La notación Big-O resume cómo crece ese uso con n:
O(1).O(n).O(n^2).En C cada tipo ocupa un tamaño fijo (por ejemplo, int suele ser 4 bytes en arquitecturas de 32/64 bits). Un array de n enteros consume O(n). Un struct combina campos y su tamaño es constante si no depende de n. Los punteros ocupan el tamaño de la dirección (4 u 8 bytes).
typedef struct {
int id;
double valor;
} Nodo; // ocupa espacio fijo, O(1) por instancia
Nodo lista[1000]; // O(n) con n = 1000 elementos
Cada llamada recursiva empuja un frame en el stack con sus variables y direcciones de retorno. Si la profundidad es n, el espacio es O(n) aunque el trabajo sea O(log n).
int suma_recursiva(const int *v, int n) {
if (n == 0) return 0;
return v[0] + suma_recursiva(v + 1, n - 1); // profundidad n, espacio O(n)
}
Prefiere versiones iterativas cuando la profundidad puede ser grande o usa recursión con cola optimizable por el compilador si aplica.
Reservar memoria en el heap con malloc permite crear estructuras cuyo tamaño depende de la entrada. Hay que liberar con free para evitar fugas.
int *crear_buffer(int n) {
int *buf = malloc(sizeof(int) * n); // O(n) espacio
if (!buf) return NULL;
return buf;
}
Listas enlazadas, árboles y grafos almacenan punteros extra; su costo espacial incluye nodos y referencias.
n.n nodos o tablas de programación dinámica con dimensiones n × n.Elegir estructuras afecta tiempo y memoria:
O(n) o más en espacio.