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