Luis

Páginas: 6 (1269 palabras) Publicado: 16 de diciembre de 2010
Memoria dinamica: new y delete
La memoria dinámica es un espacio de almacenamiento que se puede solicitar en tiempo de ejecución. Además de solicitar espacios de almacenamiento, también podemos liberarlos (en tiempo de ejecución) cuando dejemos de necesitarlos.
Para realizar esta administración de la memoria dinámica, C++ cuenta con dos Supongamos que nuestro programa debe manipularestructuras de datos de longitud desconocida. Un ejemplo simple podría ser el de un programa que lee las líneas de un archivo y las ordena. Por tanto, deberemos leer un número indeterminado de líneas, y tras leer la última, ordenarlas. Una manera de manejar ese ``número indeterminado'', sería declarar una constante MAX_LINEAS, darle un valor vergonzosamente grande, y declarar un array de tamaño MAX_LINEAS.Esto, obviamente, es muy ineficiente (y feo). Nuestro programa no sólo quedaría limitado por ese valor máximo, sino que además gastaría esa enorme cantidad de memoria para procesar hasta el más pequeño de los ficheros.
La solución consiste en utilizar memoria dinámica. La memoria dinámica es un espacio de almacenamiento que se solicita en tiempo de ejecución5.4. De esa manera, a medida que elproceso va necesitando espacio para más líneas, va solicitando más memoria al sistema operativo para guardarlas. El medio para manejar la memoria que otorga el sistema operativo, es el puntero, puesto que no podemos saber en tiempo de compilación5.5dónde nos dará huecos el sistema operativo (en la memoria de nuestro PC).
operadores new y delete. Antes de utilizarlos, debemos incluir el encabezado<new>.
El operador new reserva memoria dinámica de cualquier tipo, esto es:
* tipos primitivos (int, double, etc)
* tipos definidos por el usuario (clases o estructuras).
are here: start » estructura_datos_csharp:start » estructura_datos_csharp:manejo_memoria_dinamica
MANEJO DE MEMORIA DINÁMICA Es también llamada almacenamiento libre (freestore) y en estos casos el programadorsolicita (new) memoria para almacenar un objeto y es responsable de liberarla (delete) para que pueda ser reutilizada por otros objetos.
Es aquella que se reserva en tiempo de ejecución después de leer los datos y de conocer el tamaño exacto del problema a resolver. El sitio donde se almacenan los objetos se le denomina HEAP = MONTÍCULO pero el sitio preciso donde se encuentra tal montículodepende del compilador y el tipo de puntero utilizado en l reserva de memoria dinámica.
Puntero (apuntador): un puntero o apuntador es un tipo especial de variable que almacena el valor de una dirección de memoria la cual puede ser de una variable individual, de un elemento de un arreglo, una estructura u objeto de una clase y se anota de la siguiente manera:
Tipo de apuntador + nombre de lavariable.
* Int * Pint; puntero a un entero.
* Char * Pchar; puntero de carácter.
* Fecha * Pfecha; puntero objeto de la clase fecha.
Independientemente del tamaño del objeto apuntado por una variable puntero el valor almacenado por esta sera el de una única dirección de memoria, por este motivo no existen diferencias sintácticas entre punteros a elementos individuales y punteros aelementos a un arreglo o una clase.
Sintáxis para requerir y liberar memoria dinámica
| Variable individual | Array de elementos |
Reserva de memoria | int * a = new int; | int * a = new int [N]; |
Liberación de memoria | delete a; | delete [] a; |
Supongamos que nuestro programa debe manipular estructuras de datos de longitud desconocida. Un ejemplo simple podría ser el de un programa quelee las líneas de un archivo y las ordena. Por tanto, deberemos leer un número indeterminado de líneas, y tras leer la última, ordenarlas. Una manera de manejar ese ``número indeterminado'', sería declarar una constante MAX_LINEAS, darle un valor vergonzosamente grande, y declarar un array de tamaño MAX_LINEAS. Esto, obviamente, es muy ineficiente (y feo). Nuestro programa no sólo quedaría...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Luis
  • Luis
  • luis
  • Luis
  • Luis
  • luis
  • luis
  • luis

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS