Heap o Stack
La memoria en C++ se puede asignar de dos maneras principales: en el stack
(pila) y en el heap
(espacio libre).
Stack (Pila):
- Asignación estática: La memoria en el stack se asigna de manera estática durante la compilación. La cantidad de memoria necesaria debe ser conocida en tiempo de compilación.
- Alcance local: Las variables en el stack tienen un alcance local y se destruyen automáticamente cuando salen de su ámbito (como cuando una función termina).
- Velocidad: La asignación y liberación de memoria en el stack es rápida, ya que implica simplemente mover el puntero de la pila hacia arriba o hacia abajo.
Heap (Espacio Libre):
- Asignación dinámica: La memoria en el heap se asigna dinámicamente en tiempo de ejecución mediante operadores
new
ydelete
(omalloc
yfree
en C). - Alcance global: Las variables en el heap pueden tener un alcance global y persistir más allá del ámbito que las creó. Su vida útil debe gestionarse explícitamente.
- Velocidad: La asignación y liberación de memoria en el heap son generalmente más lentas que en el stack, ya que implica la gestión de estructuras de datos más complejas.
- Asignación dinámica: La memoria en el heap se asigna dinámicamente en tiempo de ejecución mediante operadores
Tamaño:
- Limitación de tamaño: La memoria del stack suele ser limitada y está predefinida, mientras que el heap suele tener más espacio disponible (limitado solo por la memoria del sistema).
- Fragmentación: El heap puede experimentar fragmentación, ya sea interna o externa, a medida que se asignan y liberan bloques de memoria.
Acceso:
- Acceso: El acceso a la memoria en el stack es generalmente más rápido, ya que implica simplemente mover el puntero de la pila. El acceso a la memoria en el heap puede ser más lento debido a la necesidad de desreferenciar punteros.
En resumen, la elección entre el stack
y el heap
depende de varios factores, como la duración, el tamaño y la complejidad de la memoria requerida.
malloc
y free
no se puede utilizar en 42.