Informática Ingeniería en Electrónica y Automática Industrial

Slides:



Advertisements
Presentaciones similares
Tema 1. Introducción a la programación (Lenguaje java).
Advertisements

Informática Ingeniería en Electrónica y Automática Industrial
TEORIA DE LA INFORMACION INGENIERO ANYELO QUINTERO.
Informática Ingeniería en Electrónica y Automática Industrial
MEMORIA DINÁMICA.
Tema 1. Estructuras de datos Objetivo: Objetivo: El alumno resolverá problemas de almacenamiento, recuperación y ordenamiento de datos y las técnicas de.
FUNDAMENTOS DE PROGRAMACIÓN VARIABLES, CONSTANTES Y TIPOS DE DATOS EN C.
Vinculación de Instrucciones y Datos a Memoria Tiempo de compilación: si la dirección de memoria se conoce a priori, se puede generar código absoluto;
Estructura_clase Ing. Eduard Antonio Lozano Córdoba.
Memoria Dinámica Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez.
Introducción a punteros en C
El lenguaje de Programación C Fernando J. Pereda.
INSTITUTO TECNOLÓGICO SUPERIOR DE FELIPE CARRILLO PUERTO. MATERIA: Estructura De Datos TIPO: Presentación (Unidad 3 Estructura lineales ) DOCENTE: MTL.
Lenguaje de Programacio Python Presentado por Jubel Crispán Materia Informatica Educativa.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Funciones en lenguaje C 2 Funciones Definición: – Las funciones son los bloques de construcción básicos de C. Dentro de ellas se da toda la actividad.
Capítulo 5 Silberschatz Galvin
Programación en C - manejo de Archivos
Funciones, Arreglos y Vectores
TIPOS ABSTRACTOS DE DATOS.
Informática Ingeniería en Electrónica y Automática Industrial
Polimorfismo y Métodos Virtuales
¿Cómo almacenar grandes cantidades de datos?
Manejo de Punteros y objetos en memoria dinámica en C++
Conceptos básicos de programación
FUNCIONES Y PROCEDIMIENTOS
TIPOS DE DATOS Cadenas y caracteres PARCIAL III.
Métodos en Java.
Algunas Características de C++ no presentes en C
Arreglos. en Lenguaje C n
Definición y Conversión de datos
Tema 3. Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación.
Algunas Características de C++ no presentes en C
Manejo de Punteros y objetos en memoria dinámica en C++
Definición y Conversión de datos
G87 Ciclo fijo de cajera rectangular - 1/6
Vectores Unidad II A Z L D Comenzar.
Tema 7 Arreglos Parte 1.
LENGUAJE DE PROGRAMACION III Estructuras Estáticas de Datos
Cobol C Pascal Fortran 6. PARAMETRIZACIÓN SmallTalk Java C++
ARRAYS Y COLECCIONES DE DATOS
Programación 2 Unidad 01 - Conceptos Básicos de Programación Orientada a Objetos y Entorno Visual.
Unidad 3 Punteros.
El Lenguaje C: Elementos Básicos
LENGUAJE C.
Fundamentos de Programación
Tipos de Datos abstractos
Programación I MC José Andrés Vázquez Flores
Conferencia 2 TDA Lista lineal.
Tipos de Datos abstractos
INTRODUCCION Hasta ahora solo hemos tenido que trabajar con algunas variables en cada uno de los programas que hemos realizado. Sin embargo, en más de.
Estructuras de Datos Dinámicas
ARREGLOS.
Fundamentos de Informática Especialidad de Electrónica –
MC Beatriz Beltrán Martínez Otoño 2017
Arreglos en Java.
PUNTEROS EN EL LENGUAJE C
Informática Ingeniería en Electrónica y Automática Industrial
Curso de Programación Estructurada
Informática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial
Algunas Características de C++ no presentes en C
Informática Ingeniería en Electrónica y Automática Industrial
Fundamentos de la Programación I
Informática Ingeniería en Electrónica y Automática Industrial
Manejo de Punteros y objetos en memoria dinámica en C++
INTRODUCCIÓN AL LENGUAJE C++
Polimorfismo en C++ y Métodos Virtuales
Memoria estática versus dinámica con Estructuras
Transcripción de la presentación:

Informática Ingeniería en Electrónica y Automática Industrial Asignación dinámica de memoria en lenguaje C

Asignación dinámica de memoria en lenguaje C Definición La memoria en los programa en ejecución Asignación y liberación dinámica de memoria Vectores dinámicos Unidimensionales Bidimensionales Reasignación de bloques de memoria 7.04.2014

Definición En la declaración de variables, el compilador de C reserva memoria para cada variable: Si son globales, en la zona de datos asociada al propio programa Si son locales, en la zona de pila (stack) La asignación dinámica de memoria consiste en la reserva de memoria para los datos en tiempo de ejecución, es decir, tomándola de la que el proceso tiene previsto para ello (heap). 7.04.2014

La memoria en los programas en ejecución Un programa en ejecución es un proceso activo que tiene a su disposición: El tiempo de utilización del procesador La memoria que le asignó el sistema operativo Segmento de código Segmento de datos (variables globales) Segmento de pila Variables locales Direcciones de regreso de las llamadas a funciones 7.04.2014

Asignación y liberación dinámica de memoria (I) En tiempo de ejecución es posible pedir memoria al sistema operativo: void *malloc(unsigned tamanio); Está declarada en stdlib.h tamanio es un entero sin signo que indica el número de bytes que se solicitan al sistema operativo La función devuelve un puntero genérico que apunta a la dirección de comienzo del bloque de memoria asignado. En caso de error devuelve un puntero nulo (NULL) En el prototipo se indica que devuelve un puntero de tipo void que puede apuntar a cualquier tipo válido. 7.04.2014

Asignación y liberación dinámica de memoria (II) Tras utilizar la memoria asignada dinámicamente, hay que devolverla al sistema operativo, liberándola de nuestro programa: void free(void *nombrepuntero); Está declarada en stdlib.h nombrepuntero es el identificador del puntero (de cualquier tipo) que apunta al bloque de memoria que se desea liberar La función no devuelve nada 7.04.2014

Asignación y liberación dinámica de memoria (III) Ejemplo: asignación dinámica de memoria para un entero y liberación posterior: int *dato; /* Puntero a int */ dato = (int *)malloc(sizeof(int)); if (dato==NULL) printf(“Error en la asignación”); ... /* Operaciones de utilización de la memoria asignada */ free(dato); /* Liberación de la memoria asignada dinámicamente */ 7.04.2014

Vectores dinámicos (I) Los vectores dinámicos son aquellos cuyo tamaño se determina en un proceso de asignación dinámica de memoria Vectores dinámicos unidimensionales: void *calloc(numelementos, tamañoelemento); Está declarada en stdlib.h Devuelve un puntero convertible a cualquier tipo de dato que apunta a la primera posición del bloque de memoria asignado (o puntero nulo en caso de error) numelementos es un entero sin signo que representa el número de elementos del vector tamañoelemento es un entero sin signo que representa el tamaño de un elemento del vector Ejemplo: reserva de memoria para un vector de 10 elementos de tipo double: punt =(double *)calloc(10, sizeof(double)); 7.04.2014

Vectores dinámicos (II) Vectores dinámicos bidimensionales: Debemos crear un puntero a puntero al tipo de datos del vector bidimensional Debe asignarse dinámicamente un vector de punteros Debe asignarse dinámicamente un vector para datos a cada uno de los punteros del vector anterior Tras su utilización, debe liberarse la memoria en orden inverso al orden en el que fue asignada: Primero, mediante un bucle, se libera cada uno de los vectores unidimensionales del tipo de dato utilizado Después, mediante otro bucle, se libera el vector de punteros 7.04.2014

Vectores dinámicos (III) 7.04.2014

Vectores dinámicos (IV) Ejemplo: asignación dinámica de memoria para un vector unidimensional de N enteros y liberación posterior: int *lista; /* Puntero a int */ lista = (int *)calloc(N, sizeof(int)); if (lista==NULL) printf(“Error en la asignación”); ... /* Operaciones de utilización de la memoria asignada */ free(lista); /* Liberación de la memoria asignada dinámicamente */ 7.04.2014

Vectores dinámicos (V) Ejemplo: reserva dinámica de memoria para un vector bidimensional de números reales (matriz de NFIL filas y NCOL columnas) y su liberación posterior: float **punt; // Puntero a puntero a float int i,j; punt = (float **)calloc(NFIL , sizeof(float *)) // Vector de NFIL punteros a float for (i=0 ; i<NFIL ; i++;) punt[i] = (float *)calloc(NCOL , sizeof(float)); // Se dispone de NFIL vectores de NCOL números reales. // Los datos pueden ser referenciados mediante // expresiones del tipo punt[i][j] for (i=0 ; i<NFIL ; i++) free(punt[i]); // Se liberan los vectores unidimensionales (las filas // de la matriz de números reales) free(punt); // Se libera la memoria del vector unidimensional de // punteros a float 7.04.2014

Reasignación de bloques de memoria Es posible reasignar un bloque de memoria previamente asignado dinámicamente (para redimensionar ese bloque) void *realloc(void *puntbloc, numbytes); La función está definida en stdlib.h Devuelve un puntero genérico al bloque de memoria asignado, cuya dirección de comienzo puede ser diferente de la dirección inicial. En caso de error devuelve un puntero nulo (NULL) No se pierden los datos almacenados en el bloque de partida, se traslada su ubicación puntbloc es un puntero que apunta al bloque de memoria que se quiere reasignar numbytes es un número entero sin signo que indica el nuevo tamaño en bytes que deberá tener el bloque de memoria 7.04.2014