Memoria estática versus dinámica con Estructuras

Slides:



Advertisements
Presentaciones similares
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Advertisements

Programación I Teoría IV
Estructuras de Datos Punteros y algo más.
Unidad 3 Punteros.
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Diseño de algoritmos “Punteros”
1 Chapter 15 Pointers, Dynamic Data, and Reference Types Dale/Weems/Headington.
Capítulo 5. Punteros y Cadenas de Caracteres
Estructuras.
Unidad VI Registros (estructuras, uniones y enumeraciones)
Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -11-
Estructuras con punteros: Nodos y Listas. Fichas ordenas en orden alfabético y por otro criterio, usando hilos : hilo de inicio : hilo de ficha : hilo.
Universitarios: Ricardo Gonzales Jimenez Wilfredo Coca Reinaldo Yohan Docente: Lic. Israel Torrez Valverde Tema: Listas doblemente Enlazadas.
Memoria estática versus dinámica con Estructuras
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
Memoria dinámica con Estructuras. Memoria dinámica ¿Qué hacer cuando las variables declaradas son insuficientes o cuando no se conoce anticipadamente.
Los punteros Programación modular.
Punteros Recomendado: 1. Nivelación Funciones
INSTITUTO TECNOLOGICO DE APIZACO
Estructuras con punteros: Nodos y Listas. Un programa C.
Laboratorio de programación
MEMORIA DINÁMICA.
UNIDAD 8 Lista Enlazada: Eliminar Deseamos eliminar un elemento llamado elem de la lista enlazada. Es posible que la variable ini sea modificada. main(){
AYUDANTÍA 2 Lenguaje Imperativo y Java. Punteros Dirección a memoria (puede apuntar a NULL). Permite trabajar con memoria (variables dinámicas de heap).
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.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
IntroducciÓn a los Arreglos (“arrays”) en C++
BREVE INTRODUCCION A LA PROGRAMACION
Arreglos (Arrays) Programación 1.
Programación en C - manejo de Archivos
TIPOS ABSTRACTOS DE DATOS.
Métodos y parámetros.
Manejo de Punteros y objetos en memoria dinámica en C++
Algunas Características de C++ no presentes en C
Clases y Objetos en Java
Definición y Conversión de datos
LISTAS..
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
Manejo de Punteros y objetos en memoria dinámica en C++
Ayudantía 3: Procesos y threads
ESTRUCTURA DE UN PROGRAMA SIMPLE EN JAVA
Funciones de una computadora
Manejo de Punteros y objetos en memoria dinámica en C++
Programación 2 Unidad 01 - Conceptos Básicos de Programación Orientada a Objetos y Entorno Visual.
Unidad 3 Punteros.
Árboles clase 6 Apoyo de Práctica. Resumen ●Árboles ○Concepto ○Características ○Dinámica ○Recorridos o barridos. ●Ejercicio Sugerido.
Tipos de Datos abstractos
UNIVERSIDAD TECNOLOGICA DE MEXICO SC Lenguajes de Programación I
Tipos de Datos abstractos
Estructuras de Datos Dinámicas
TEMAS *Arboles Binarios *listas Abiertas y Cerradas - Inserción - Recorrido - Eliminación *Pilas - Concepto - Inserción - Recorrido -
Listas ligadas Dra. María de Lourdes López García
UNIDAD 8 Agregar al Inicio
PUNTEROS EN EL LENGUAJE C
Informática Ingeniería en Electrónica y Automática Industrial
Manejo de Punteros y objetos en memoria dinámica en C++
Curso de Programación Estructurada
Tipos de asignaciones DHCP
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
Manejo de Punteros y objetos en memoria dinámica en C++
Manejo de Punteros y objetos en memoria dinámica en C++
Programación Modular Programación de Computadoras - Hugo Vega Grupo2: Reina Rodríguez Miriam Salluca.
Comunicación en Red ”Dirección IP”
Manejo de Punteros y objetos en memoria dinámica en C++
Transcripción de la presentación:

Memoria estática versus dinámica con Estructuras

Memoria dinámica ¿Qué hacer cuando las variables declaradas son insuficientes o cuando no se conoce anticipadamente cuanto almacenamiento será requerido por el programa? 1. Se crea una variable de tipo puntero. 2. Se le pide al sistema operativo que asigne más memoria. 3. El sistema operativo retorna la dirección a la memoria asignada. 4. Si la memoria asignada, no se usará más, se puede devolver al sistema operativo.

Memoria estática/dinámica 1 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } Número de bytes que usa una variable de este tipo b x p a NULL

Memoria estática/dinámica 2 struct str { int x; struct str *p; }; main(){ // se crea la variable estructurada estatica, "a" que tiene memoria asignada, // la relacion entre el nombre "a" y la memoria asignada es permanente: struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } b x p a NULL

Memoria estática/dinámica 3 struct str { int x; struct str *p; }; main(){ struct str a; // se crea la variable de tipo puntero "b" para apuntar a variables estructuradas, // no hay memoria asignada de tipo estructurada, "b" apunta a nada: struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } b NULL a x p

Memoria estática/dinámica 4 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; // se puede modificar u obtener el contenido de los campos de la variable "a", // para ello se debe usar "." seguida del nombre del campo: a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } b a 55 NULL x p

Memoria estática/dinámica 5 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; // se pide, al sistema operativo, memoria para una variable estructurada, // la variable puntero "b" es usada para almacenar la direccion de la nueva // memoria devuelta, esto significa que “b” queda apuntando a esta nueva // variable estructurada: b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } b x p a 55 NULL x p

Memoria estática/dinámica 6 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; // se pide, al sistema operativo, memoria para una variable estructurada, // la variable puntero "b" es usada para almacenar la direccion de la nueva // memoria devuelta, esto significa que “b” queda apuntando a esta nueva // variable estructurada: b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } b a 55 NULL x p x p

Memoria estática/dinámica 7 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); // para acceder a los campos de la variable estructurada se debe usar "->" // en vez de “.”: b->x=66; a.x=a.x+b->x; } b a 55 NULL 66 x p x p

Memoria estática/dinámica 8 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); // para acceder a los campos de la variable estructurada se debe usar "->" // en vez de “.”: b->x=66; a.x=a.x+b->x; } b a 121 NULL 66 x p x p

Memoria estática/dinámica 9 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; // si la variable de tipo puntero se hace apuntar a otra variable estructurada // por ejemplo a "a", la variable estructurada, pedida en forma dinamica, // queda sin la posibilidad de ser usada por el programa: b=&a; } b a 121 NULL 66 x p x p

Memoria estática/dinámica 10 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; // la forma correcta es devolver dinamicamente la memoria: free(b); b=&a; } b NULL x p 66 a 55 x p

Memoria estática/dinámica 11 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; free(b); b=&a; // NO es necesario declarar una variable estructurada como “a” para formar una lista } b a 55 x p

Memoria dinámica 1 b NULL struct str { int x; struct str *p; }; main(){ struct str *b=NULL; ………… // BASTA con declarar una variable tipo puntero a estructur como “b” y usar malloc y free // si el puntero tiene asignado el valor NULL, se dice que apunta a NULL (“nada”) // si el valor del puntero es NULL, se dice que la lista está vacía } b NULL