UC3M

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2017 - Enero 2018

Gestión de memoria dinámica en C

Ejercicios

1. Las funciones para gestionar memoria en C

Plan de trabajo

  1. Resuelve los trece primeros problemas. Si tras resolverlos tienes dudas sobre el funcionamiento de la gestión de memoria acude a consultas con el profesor. Si ves que los conceptos los tienes claros, resuelve los problemas restantes.

¿Cuánto tiempo has dedicado a esta actividad? mins.

2. Gestión de memoria en C y en Java

Recursos

  • Para esta actividad se utilizará la siguiente tabla:

    Aspecto C Java
    Llamada para obtener memoria
    La reserva de memoria precisa tamaño
    Más de una función disponible para reserva/creación
    ¿Se inicializa la memoria reservada?
    Llamada para destruir/liberar memoria
    Llamada para cambiar el tamaño de un bloque previamente reservado
    ¿Es posible acceder fuera de los límites de un bloque reservado?
    ¿Qué sucede cuando el puntero a un bloque de memoria reservado se pierde (no está almacenado ya en ninguna variable)?

Plan de trabajo

En grupos de cuatro personas y durante cinco minutos, completar el cuadro anterior consensuando las respuestas.

Evaluación

Las respuestas de cada grupo se ponen en común con el resto de la clase para rellenar una tabla común.

¿Cuánto tiempo has dedicado a esta actividad? mins.

3. Gestión de conjuntos de palabras

Un programa en C necesita manipular un conjunto de palabras. Se nos encarga la tarea de implementar esta funcionalidad y para ello se nos ofrece la siguiente descripción de requisitos:

  • La aplicación puede manipular varios conjuntos separados de palabras.

  • El orden y la forma en que se almacenan las palabras en la estructura de datos no es relevante para el resto de la aplicación.

  • Las operaciones que se deben soportar son:

    1. Obtener un conjunto vacío.

    2. Dada una palabra, obtener un conjunto con esa única palabra.

    3. Dado un conjunto y una palabra, obtener el nuevo conjunto que contenga la palabra dada.

    4. Dado un conjunto y una palabra, devolver un conjunto que no contenga la palabra dada. Si la palabra no existe, el conjunto no se modifica

    5. Destruir un conjunto de palabras dado.

  • Todas las operaciones que reciben una palabra y la almacenan, deben crear un duplicado con la llamada al sistema strdup. Esta función recibe una cadena de tipo char * terminada por un byte igual a cero y devuelve una cadena (de tipo char *) que es un duplicado del parámetro en una porción de memoria reservada con malloc.

  • La solución propuesta debe ser compacta, es decir, tener un uso de memoria lo más reducido posible.

Plan de trabajo

  1. En grupos de cuatro personas, discutir durante cinco minutos la estructura de datos que se propone para manipular estos conjuntos de cadenas de texto. Escribir su definición en C. Comentar la solución propuesta con el resto de la clase. Derivar una propuesta final sobre la que trabajarán todos los grupos.

  2. El equipo propone una implementación de la función que devuelve un conjunto vacío y la que devuelve un conjunto con una única palabra. Comprobar la solución propuesta con el profesor.

  3. El equipo propone una implementación para la función que inserta una palabra en un conjunto. Prestar especial atención al tipo de datos que debe devolver esta función.

  4. Escribir las definiciones de las cabeceras de las dos funciones restantes (la que borra un elemento y la que destruye un conjunto).

  5. Supongamos que ya tenemos escritas todas las funciones, ahora el resto de la aplicación las quiere usar, pero tal y como se incluye en la especificación, no se requiere saber cómo están almacenados los datos internamente. ¿Cómo organizarías el código y las definiciones para conseguir esto?

  6. Implementar una de las dos funciones restantes.

¿Cuánto tiempo has dedicado a esta actividad? mins.