90 likes | 239 Views
Programación Científica. Dr. Romeo S ánchez Nigenda . E-mail: romeo.sanchez @ gmail.com http: //yalma.fime.uanl.mx/~ romeo / Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves Website: http://yalma.fime.uanl.mx/~ romeo/Prog/ Sesiones: 48
E N D
Programación Científica Dr. Romeo SánchezNigenda. E-mail: romeo.sanchez@gmail.com http://yalma.fime.uanl.mx/~romeo/ Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves Website: http://yalma.fime.uanl.mx/~romeo/Prog/ Sesiones: 48 * Slides aumentados con información de Dr. Roger Ríos, y Dr. Fernando López
40% Proyecto 30% Examen Parcial 30% Examen Final 10% Participación Temario: • Fundamentos de Programación en C • Apuntadores y Funciones • Arreglos y Estructuras • Manejo de Memoria • Recursividad • Entrada y Salida de Archivos • Desarrollo y Depuración de Proyecto de Programación Total a calificar: 110 puntos!
Material de apoyo: A. KELLY, I. POHL. A Book on C. Addison-Wesley, Reading, EUA, 1998. 2. B. KERNIGHAN, D. RITCHIE. The C Programming Language. Prentice Hall, Second Edition, 1988. 3. D. KNUTH. The Art of Computer Programming. Addison Wesley, 1998. 4. H. DEITEL, P. DEITEL. Como Programar en C/C++. Prentice Hall, Segunda Edición. 1995. 5. L. Joyanes, I. Zahonero. Programación en C - Metodología, Algoritmos y Estructura de Datos. McGraw Hill-Interamericana, 2006. 6. B. Stroustrup. The C++ Programming Language. Addison Wesley. Third Edition. 1997. Software: Compiladores GCC (GNU CompilerCollection) IDEs (IntegratedDevelopmentEnvironment): http://www.eclipse.org/downloads/ http://kdevelop.org/ http://www.bloodshed.net/devcpp.html
Objetivo General: Entenderá los conceptos relacionados a la asignación de memoria dinámica y manejará las herramientas en C para llevarla a cabo. Asignación Dinámica de Memoria
Preliminares • C/C++ da la flexibilidad al programador de asignar y liberarmemoria dinámica • La tarea de asignar memoria consiste en encontrar un block de memoria libre del tamaño requerido. • La tarea de liberar memoria regresa la memoria asignada para poder ser reutilizada cuando esta ya no es requerida. • El Heap es un área de memoria libre que puede ser utilizada para asignarse.
Manejo de Memoria • C da acceso al manejo de memoria utilizando funciones de su librería <stdlib.h>: • void * malloc(size_t size) • Solicita un bloquecontiguo de memoria del tamaño requerido por la variable size, y retorna un puntero al bloque asignado, o NULL si no es posible. • void free (void* block) • Toma un puntero a un bloque de memoriapreviamenteasignadopormalloc() y retornaesebloque al Heap parasureutilización. • void* realloc (void* block, size_t size) • Toma un bloque de memoriaexistente, y trata de reasignarlo a un bloque con un nuevo tamaño (más grande o más pequeño). Retorna NULL si no es posible.
Arreglos Dinámicos • Los arreglos representan posiciones contiguas de memoria. Podemos entonces asignarlos dinámicamente. intmain(){ //Forma usual reservamos un arreglo de 100 enteros int a[100]; //Dinamicamente asignamos un bloque de 100 posiciones int * p = (int *) malloc(sizeof(int) * 100); //Verificamos la asignacion assert(b!=NULL); a[88] = 5; b[88] = 5; //Las dos variables pueden ser usadasigual free(b); }
Ventajas de usarmemoria dinámica • El tamaño de las estructuras de datos puede definirse en tiempo de ejecución • Los datos existirán hasta que explícitamente se libere usando free • En tiempo de ejecución se puede modificar el tamaño de memoria asignada. Por ejemplo, para incrementar nuestro arreglo en 100 b = realloc(b, sizeof(int) * 200);
Desventajas de usarmemoria dinámica • Antes de usar los datos tienes que asignarle memoria • Tienes que liberar la memoria explícitamente • Los programas con asignación de memoria dinámica son difíciles de depurar porque al compilarlos puede no existir error, pero si la asignación o liberación no se hizo de manera correcta pueden sobreescribirse otras áreas de memoria, corrompiendo datos durante ejecución.