Memoria dinámica y punteros

Solo disponible en BuenasTareas
  • Páginas : 5 (1220 palabras )
  • Descarga(s) : 0
  • Publicado : 24 de octubre de 2010
Leer documento completo
Vista previa del texto
Departamento de Informática Universidad de Valladolid Campus de Segovia ______________________

TEMA 2: MEMORIA DINÁMICA y PUNTEROS

1

MEMORIA DINÁMICA y PUNTEROS
•Introducción •Conceptos básicos •Definición y declaración de punteros •Creación y destrucción de variables dinámicas. •Operaciones básicas con datos referenciados •Operaciones básicas con punteros •El valor nil •Aplicacionesno recursivas de los punteros

2

INTRODUCCIÓN
• Las estructuras de datos hasta ahora vistas se almacenan estáticamente en la memoria física del ordenador.
– El espacio de memoria se reserva con anticipación y no cambia durante la ejecución del programa*. – Esto permite una comprobación de tipos en tiempo de compilación.



Inconvenientes de la configuración estática: – Su rigidez, yaque estas estructuras no pueden crecer o menguar durante la ejecución del programa.

* Esto no implica que la cantidad de memoria de ejecución de un programa sea constante, ya que
dependerá del numero de subprogramas recursivos invocados por el programa.

3

INTRODUCCIÓN
• La definición y manipulación de estos objetos se realiza en Pascal mediante los punteros (variables cuyo contenido sonposiciones de memoria). Ventaja frente a las estructuras estática:
– La flexibilidad que poseen las estructuras dinámicas en cuanto a las formas que pueden adoptar: árboles, listas, redes, etc...





Inconvenientes:
– Alliasing: Doble direccionamiento sobre una misma variable lo que implica efectos laterales. – Gestión de la memoria: Su uso requiere una especial atención de la memoriadisponible así como de la que ya no queramos utilizar.

4

CONCEPTOS BÁSICOS
• Un puntero es una variable que contiene la dirección de memoria donde se encuentra almacenado un dato. Una variable referenciada o dato apuntado es el dato cuya posición en memoria está contenida en un determinado puntero (variable dinámica).



Dirección de memoria 0123 4567

Memoria 1365 2056 punteroVariable referenciada
5

1365 2056

DATO

REPRESENTACIÓN GRÁFICA
Variable referenciada

Puntero

DATO

6

DEFINICIÓN Y DECLARACIÓN DE PUNTEROS



Para poder usar una variable puntero es necesario:
Definir el tipo de dato (o estructura) al que se apunta. (esta declaración se realiza dentro de la sección TYPE). Declarar las variables punteros que sean necesarias (estadeclaración se realiza dentro de la sección VAR).





En Pascal un puntero sólo puede señalar a objetos de un mismo tipo, el establecido en la declaración.

7

DIAGRAMA SINTÁCTICO

^
Ejemplo I: TYPE tapunchar=^char; VAR apcar:=tapunchar; VAR Ejemplo II: TYPE

TIPO

tApNodo=^tNodo; tNodo=record info:....... Sig:tApNodo end; ApNodo:=tApNodo;
8

ALGUNAS OBSERVACIONES AL RESPECTO
• Unavariable de tipo puntero ocupa una cantidad de memoria fija, independiente del tipo de dato al que apunta. • Un dato referenciado, como el del ejemplo, no posee existencia inicial, o lo que es lo mismo no existe inicialmente espacio reservado en memoria para el.

9

LA NECESIDAD DE UTILIZAR PUNTEROS
• Para poder emplear variables dinámicas es necesario emplear un tipo de dato que permitareferenciar nuevas posiciones de memoria que no han sido declaradas a priori y que se van a crear y destruir en tiempo de ejecución. • Estas variables son los punteros que en Pascal es un tipo de dato simple.

10

CREACIÓN Y DESTRUCCIÓN DE VARIABLES DINÁMICAS
• Las variables dinámicas son por definición aquellas que se crean cuando se necesitan y se destruyen cuando ya han cumplido con sucometido. • En pascal la creación y destrucción de variables dinámicas se realiza mediante los siguientes procedimientos:
– New(puntero) – Dispose(puntero)
11

CREACIÓN DE UNA VARIABLE DINÁMICA
• New(puntero)
– Reserva la memoria necesaria para un dato del tipo apropiado. – Coloca la dirección de memoria de esta nueva variable en el puntero.

• Gráficamente esto se representa:

???????...
tracking img