Manejo de
Memoria
Ciencias de la Computación III
Diego José Figueroa
Manejo de Memoria
En C tenemos 3 regiones de memoria principales.
- Región Estática
- Variables globales
- Todo lo que deba permanecer durante toda la ejecución.
- Stack
- Variables Locales
- Parámetros
- Administrado por el sistema.
- Heap
- Almacenamiento dinámico.
- Administrado por el programador.
Stack
- Organizado en frames.
- Estructura de datos LIFO.
- Crece hacia abajo.
- Mantenemos un puntero al tope del stack, Stack Pointer.
Stack
Stack
Heap
- Sección de memoria dinámica.
- No se asigna de forma continua.
- Recuerden la instrucción new de Java.
- Se solicita explícitamente.
- También se debe liberar explícitamente.
Manejo de Memoria
Manejo del Heap
- A diferencia del Stack, se administra de forma explícita.
- malloc - Memory allocation
- Reserva espacio en memoria.
- La cantidad a pedir se indica en bytes.
- Devuelve un puntero a void.
struct Node* n;
n = (struct Node*)malloc(sizeof struct Node);
Manejo del Heap
- Free
- Liberar una región de memoria ya no necesaria.
- Debemos hacer esto para evitar memory leaks.
struct Node* n;
n = (struct Node*)malloc(sizeof struct Node);
...
free(n);
Manejo del Heap
Manejo del Heap
Manejo del Heap
- Una solicitud de memoria puede ser satisfecha asignando diferentes bloques de memoria.
- ¿Cuál se debe escoger?
Políticas de Asignación
- First fit
- Se asigna el primer bloque encontrado suficientemente grande.
- Súmamente rápido.
- Best fit
- Se asigna el bloque más pequeño posible de utilizar.
- Reduce el desperdicio (fragmentación).
- Next fit
- Como first fit, pero comienza por donde se quedó la ultima vez.
- Trata de lograr un punto medio.
04 - Memory
By Diego Figueroa
04 - Memory
- 660