Ver Mensaje Individual
  #4  
Antiguo 20-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 27
jachguate Va por buen camino
No es que una forma sea mas profesional que la otra. El uso de punteros te permite hacer mas dinámico y eficiente el uso de memoria. De hecho, la solución con puntero en el caso que expusiste ocupa en realidad 4 bytes mas de memoria al reservar la memoria para la estructura (en este caso array)... pero mientras esto no se haga, ocupará solamente 4 bytes como bien lo apuntó ya Lepe.

Otra diferencia importante es que al inicializar un puntero, la memoria se reserva en el heap (monton), mientras que si es una variable estática local se consume el precioso espacio del stack (pila) y si es estática pues queda en el segmento de datos del ejecutable.

Veamos:

Código Delphi [-]
type
  PCycleArray = ^TCycleArray;
  TCycleArray = array[1..100] of Integer;

Procedure Prueba;
var
  CycleArrayD : PCycleArray; // esta variable ocupa 4 bytes en memoria
  CycleArrayE : TCycleArray; // esta variable ocupa 400 bytes de memoria

Begin
  New(CicleArrayD); // esto reserva los 400 bytes en el heap
  // a partir de aqui el uso es prácticamente el mismo.
  CicleArrayE[1] := 20;
  CicleArrayD^[1] := 20;
  .
  .
  .
  Dispose(CicleArrayD); // si esto no se hace la memoria se queda desperdiciada!
End;

Con uso tan simple, yo me decantaría por la variable estática, dado también su poco consumo de memoria. La principal ventaja de los punteros es que te permite manejar estructuras de datos mas complejas de manera dinámica y limitado prácticamente solo por los recursos de la máquina: pilas, colas, listas, árboles, etc.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita