Clase 10 Apuntadores & Memoria Dinámica

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
Curso de java básico (scjp)
Procedimientos y Funciones
Clase 3: Punteros y Referencias
Programación I Teoría III
Direcciones, Arreglos y Argumentos de Funciones
Tipos de Datos Básicos y Estructurados
Tema 1. Introducción a la programación (Lenguaje java).
Funcionamiento, programación
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Implementación de Listas
ARREGLOS Estructuras de datos.
SOBRECARGA DE FUNCIONES
Estructuras de Datos Punteros y algo más.
Unidad 3 Punteros.
Herramientas para el acceso directo a memoria en C++
Vectores en java.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Material de apoyo Unidad 2 Estructura de datos
Tema 6: Clases Antonio J. Sierra.
Diseño de algoritmos “Punteros”
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.
1 Chapter 15 Pointers, Dynamic Data, and Reference Types Dale/Weems/Headington.
Semana 5 Subprogramas..
Programación III Clase 07 Funciones.
Matrices Es una estructura homogénea, compuesta por varios elementos, todos del mismo tipo y almacenados consecutivamente en memoria A cada elemento se.
Arreglos.
APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando.
Índice. Revisando conceptos acerca de la memoria.
Programación III Clase 08 Arreglos.
Programa Vespertino de Automatización Equipos y Sistemas de Control Digital Lenguaje C Profesor: Felipe Páez Mejías D e p a r t a m e n t o d e I n g e.
PUNTEROS Ing Anghello Quintero.
Informática Ingeniería en Electrónica y Automática Industrial
El lenguaje de programación C - Vectores y matrices -
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Metodología de Programación Ayudantía 2 lelagos.ublog.cl 2009.
Introducción a los punteros Prof. Domingo Hernández.
Manejo de Punteros y objetos en memoria dinámica en C++
Unidad II Introducción a la programación en C++

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
PUNTEROS Y REFERENCIAS
Programación III Clase 09 Apuntadores. Declaración de Punteros Declaración: type* id; Ejemplo: int* ptr; ptr contendrá entonces una dirección a un entero.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos.
Los punteros Programación modular.
IDENTIFICADORES Un identificador es un "nombre" que nos permite dirigirnos específicamente a una de las entidades propias del lenguaje, es decir, son los.
Eficiencia en uso de recursos y memoria
Punteros Recomendado: 1. Nivelación Funciones
Arreglos de Objetos.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
Capitulo 4 Arreglos o Arrays Unidimensionales Bidimensionales Strings
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
UNIDAD 4: Introducción a la Lógica Computacional Objetivo : Interpretar y aplicar adecuadamente los fundamentos básicos de la estructura y funcionamiento.
Estructura de Datos En C++
PUNTEROS EN EL LENGUAJE C
Laboratorio de programación
Conceptos y Lenguaje Imperativo
MEMORIA DINÁMICA.
Elementos básicos.  Fuertemente tipeado.  Sintaxis similar a C/C++.  Sin punteros: garbage collection.  Portable.  Integra librerías para objetos.
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.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Transcripción de la presentación:

Clase 10 Apuntadores & Memoria Dinámica Programación III Clase 10 Apuntadores & Memoria Dinámica

Operadores para uso de Memoria Dinámica Significado new type Reserva en memoria espacio para un objeto de tipo type y retorna su dirección delete ptr Libera la memoria del objeto al que apunta ptr new type[expr] Crea un arreglo de type de tamaño de expr delete[] ptr Libera la memoria del arreglo al que apunta ptr

Ejemplo de Memoria Dinámica int* pInt = new int; *pInt = 17; cout << pInt<< endl; cout << *pInt<<endl; delete pInt; HS 0x4CD0 17 SS / DS 0x4CD0 0x3F3A pInt 17 0x4CD0

Ahora, para crear arreglos dinámicos HS int size = 3; float* fp = NULL; fp = new float[size]; for(int i=0;i<size;i++) fp[i] = 2 * i; ... delete[] fp; 0x4CD0 0x4CD4 0x4CD8 1 4 SS / DS 0x3F3A fp NULL 0x3F12 size 3 0x4CD0

Acerca del operador delete Se deben de tener ciertos cuidados con el uso del operador delete: Debe de estar seguro que se le está aplicando a una dirección de memoria previamente reservada en el Heap. Debe de estar seguro que no tenga el valor de NULL la variable. De no seguir estas indicaciones, el programa terminará incorrectamente. La segunda condición es fácil de validar, sin embargo el evitar caer en la primera es responsabilidad del programador.

Ejemplo Validación if (ptr) delete ptr; De esta manera se asegura que ptr no esté en NULL antes de intentar ejecutar el delete.

El Ámbito de la Memoria Dinámica A diferencia de las variables locales o globales, las variables que residen en memoria dinámica no mueren al finalizar su ámbito, sino que mueren exclusivamente al llamar al operador delete sobre la dirección de memoria donde se encuentran. Es por esto que se dice que trascienden del ámbito.

double* createArray(3) Demostración double* createArray(int s){ double* retVal = NULL; retVal = new double[s]; return retVal; } ... double pd = createArray(3); SS / DS double* createArray(3) 0x3F3A s 3 0x3F12 retVal NULL 0x4CD0 HS 0x4CD0 main() 0x3F12 pd ?? 0x4CD0 ?? 0x4CD8 0x4CE0 0x4CD0

Y… ¿Los arreglos multidimensionales? En el caso de los arreglos multidimensionales dinámicos, tendremos que comprender primero ciertos aspectos de cómo se representan tanto físicamente cómo lógicamente para el compilador. Lo primero que hay que tener claro es que TODOS los arreglos, así como TODOS los objetos de un programa son guardados en la memoria en la forma de un arreglo unidimensional.

Representación de un Arreglo Bidimensional (Física y Lógica) int a[2][3] = {{1,3,5}, {2,4,6}}; Representación Física Representación Lógica a a 1 3 5 2 4 6 5 4 6 4 2 6 4 6 Nótese que la representación lógica, es en sí un arreglo de arreglos, donde a es de tipo int** y a[0], a[1] son de tipo int*

Y, ¿Dinámicamente? Comprendiendo que un arreglo bidimensional es representado en realidad por un arreglo de punteros de la primera dimensión, que a su vez apuntan, cada uno, a un arreglo de la segunda dimensión; podemos crear el procedimiento para la creación dinámica de una “matriz”

Código de Creación y Destrucción de Arreglos Bidimensionales // Estos valores pueden ser introducidos // en tiempo de ejecución int rows = 2, cols = 3; float** matrix; // Se crea el arreglo de punteros matrix = new float*[rows]; for (int i=0; i<rows; i++) matrix[i] = new float[cols];

Acerca del Tamaño de los Punteros El tamaño de los punteros depende directamente de la cantidad de memoria que se desé direccionar. Por ejemplo si sólo necesitamos direccionar 256 bytes, entonces nuestros punteros serían de 1 byte. Si quisieramos direccionar 64KB (65536 Bytes) entonces nuestros punteros serían de 2 bytes. El tamaño de los punteros es independiente del tamaño del objeto al que apuntan. (Probar comparar los tamaños de punteros a char, y punteros a long double)

Retomando Ámbito y Tiempo de Vida Los Objetos Nacen: En el momento de su declaración En el momento que se crean dinámicamente Los Objetos Mueren: En el momento que se acaba su ámbito En el momento que se liberan (delete)