Herramientas para el acceso directo a memoria en

  • Slides: 15
Download presentation
Herramientas para el acceso directo a memoria en C++ M. C. Juan Carlos Olivares

Herramientas para el acceso directo a memoria en C++ M. C. Juan Carlos Olivares Rojas 1

Agenda Apuntadores en C++. Relación entre arreglos y apuntadores en C++. Aritmética de apuntadores

Agenda Apuntadores en C++. Relación entre arreglos y apuntadores en C++. Aritmética de apuntadores en C++. Memoria estática y dinámica Creación y uso de arreglos y objetos dinámicos en C++. Comparación con JAVA. 2

Apuntadores en C++. • Los apuntadores son variables que almacenan direcciones en lugar de

Apuntadores en C++. • Los apuntadores son variables que almacenan direcciones en lugar de datos. • Los apuntadores permiten apuntar hacia distintas localidades de memoria, por lo que se utilizan para generar memoria dinámica. 3

Apuntadores en C++ • Los apuntadores pueden ser de cualquier tipo, se declaran anteponiendo

Apuntadores en C++ • Los apuntadores pueden ser de cualquier tipo, se declaran anteponiendo un *: • int *puntero; //apuntador a un entero • char *cad; //apuntador a caractér • void *puntero; //puntero a cualquier tipo de dato 4

Relación entre arreglos y apuntadores en C++. • La relación que existe entre un

Relación entre arreglos y apuntadores en C++. • La relación que existe entre un arreglo y un apuntador es que el nombre de un arreglo representa una dirección de memoria y los subíndices representan un desplazamiento. • Las cadenas son arreglos de caracteres (apuntador a un carácter) 5

Aritmética de apuntadores en C++. • La aritmética de apuntadores significa poder desplazarse a

Aritmética de apuntadores en C++. • La aritmética de apuntadores significa poder desplazarse a través de la memoria. • Sólo se pueden utilizar los operadores +, -, ++, -- y otros operadores de manera indirecta. • El operador & se utiliza para obtener la dirección de una variable. 6

Memoria estática y dinámica • Los apuntadores se utilizan para crear memoria dinámica. •

Memoria estática y dinámica • Los apuntadores se utilizan para crear memoria dinámica. • De manera predeterminada, las variables se crean con memoria estática en lo que se conoce como tiempo de ejecución, por eso se debe de definir un tamaño máximo en los arreglos. 7

Memoria Dinámica • La memoria dinámica se puede crear simplemente teniendo un tipo de

Memoria Dinámica • La memoria dinámica se puede crear simplemente teniendo un tipo de dato puntero. • Por ejemplo para declarar un arreglo de enteros dinámicos, quedaría así: • int *arreglo; //no se especifica tamaño 8

Memoria Dinámica • En C se utiliza la función malloc para pedir memoria y

Memoria Dinámica • En C se utiliza la función malloc para pedir memoria y free para liberarla. • arreglo = (int *) malloc(N * sizeof(int)); • free(arreglo); • En Java no existe como tal los punteros pero se puede utilizar memoria dinámica. 9

Memoria Dinámica • En C++ al igual que Java se utiliza el operador new

Memoria Dinámica • En C++ al igual que Java se utiliza el operador new para pedir memoria dinámica. De hecho en Java los arreglos deben crearse con el operador new: • int a[5] = new int[5]; //Java • int a[] = new int[N]; //C++ 10

Memoria Dinámica • delete [] a; • En Java no existe el concepto de

Memoria Dinámica • delete [] a; • En Java no existe el concepto de liberar memoria ya que se hace de manera automática con el recolector de basura. • La memoria dinámica sirve para crear otros tipos de ADT más especializados como listas, pilas, colas, árboles, etc. 11

Memoria Dinámica • Al borrar un elemento se regresa la memoria que se pidió,

Memoria Dinámica • Al borrar un elemento se regresa la memoria que se pidió, por eso es importante liberar la memoria, ya que si no se hace se pierde ese pedazo. • Si se crea memoria dinámica para un objeto se puede llamar a su constructor para que lo inicialice. 12

Creación y uso de arreglos y objetos dinámicos en C++. Comparación con JAVA. •

Creación y uso de arreglos y objetos dinámicos en C++. Comparación con JAVA. • En Java no existe el concepto de puntero. Se pueden crear memoria dinámica. • En objetos al liberar memoria se invoca de manera automática al destructor en C++ y al método finalize() y variantes en Java. 13

Actividad • Realizar un programa que cree un arreglo con la mayor cantidad de

Actividad • Realizar un programa que cree un arreglo con la mayor cantidad de números primos. • El usuario deberá introducir el tamaño del arreglo y este deberá hacerse a través de memoria dinámica. El límite lo marcará el tamaño de la memoria disponible. 14

¿Preguntas, dudas y comentarios? 15

¿Preguntas, dudas y comentarios? 15