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

Slides:



Advertisements
Presentaciones similares
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
Advertisements

Prototipo de compilador didáctico del lenguaje LC99
Clase 3: Punteros y Referencias
Programación I Teoría III
Direcciones, Arreglos y Argumentos de Funciones
Estructuras de datos. Programación, Algoritmos y Estructuras de Datos.
Tipos de Datos Básicos y Estructurados
Las estructuras de arreglos fueron usadas en las primeras computadoras digitales, cuando la programación se hacía todavía en lenguaje máquina, para tablas.
Punteros Universidad Nacional Mayor de San Marcos
FUNCIONES EN C.
Tema 1. Introducción a la programación (Lenguaje java).
Funcionamiento, programación
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Implementación de Listas
Unidad 3 Punteros.
Herramientas para el acceso directo a memoria en C++
Vectores en java.
Funciones en lenguaje C

Tema 6: Clases Antonio J. Sierra.
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
LENGUAJE “C” Programación.
Departamento de Informática Universidad Técnica Federico Santa María Capítulo 2 “Subprogramas/Funciones - Arreglos” Arreglos-Arrays.
Introducción a los punteros
Matrices Es una estructura homogénea, compuesta por varios elementos, todos del mismo tipo y almacenados consecutivamente en memoria A cada elemento se.
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
Informática Ingeniería en Electrónica y Automática Industrial
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
Índice. Revisando conceptos acerca de la memoria.
TABLAS Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos. El tipo tabla se utiliza para.
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Informática Ingeniería en Electrónica y Automática Industrial
Descomposición Modular. Funciones
COMPUTACIÓN I TEMA 6. Pasaje de parámetros por Referencia. Uso de apuntadores Prof. Mireya Morales.
Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -11-
Tipo de Datos Básicos.
© AutoresV1.1 Informática Ingeniería en Electrónica y Automática Industrial Datos en lenguaje C.
PUNTEROS Ing Anghello Quintero.
Aplicación de estructuras de datos
Informática Ingeniería en Electrónica y Automática Industrial
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
Unidad II Introducción a la programación en C++

Clase 10 Apuntadores & Memoria Dinámica
APRENDIZ: SANDRA L. CAICEDO C. ORDEN: 20194
TEORIA DE LA INFORMACION INGENIERO ANYELO QUINTERO.
Informática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial
Programación en C para electrónicos
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
Elementos básicos del lenguaje
PUNTEROS Y REFERENCIAS
1 Definición y Conversión de datos Agustín J. González ELO-329.
Los punteros Programación modular.
Punteros Recomendado: 1. Nivelación Funciones
FUNDAMENTOS DE PROGRAMACIÓN
LENGUAJE “C” Programación.
UNIDAD 4: Introducción a la Lógica Computacional Objetivo : Interpretar y aplicar adecuadamente los fundamentos básicos de la estructura y funcionamiento.
PUNTEROS EN EL LENGUAJE C
Laboratorio de programación
Informática Ingeniería en Electrónica y Automática Industrial
Conceptos y Lenguaje Imperativo
MEMORIA DINÁMICA.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Tema 1. Estructuras de datos Objetivo: Objetivo: El alumno resolverá problemas de almacenamiento, recuperación y ordenamiento de datos y las técnicas de.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Informática Ingeniería en Electrónica y Automática Industrial
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 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

Asignación dinámica de memoria en lenguaje C 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 sistema tiene libre en ese momento.

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

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.

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

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 */

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));

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

Vectores dinámicos (III)

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 */

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

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 trasladan 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