quarta-feira, 18 de junho de 2014

Alocação dinâmica de memoria.

No inicio da graduação quando falamos de memoria pensamos em algo sem limites e que no qual nosso professor faz o comentário não se preocupa com a memoria agora, mas quando passamos a viver uma vida
cheia de códigos confusos e naturalmente grande volume de acesso a informações ou podemos traduzir em big data, pensamos que servidores possuem memoria limitada e nem sempre programamos do modo mais adequado, então voltamos a tão prometida estrutura de dados que vai determinar a eficiência do sistema, então para evitar a criação de um novo SIGAA prestemos atenção no modo com o qual programamos e se realmente aquela é a melhor solução, agora vou passar uma breve noção de alocação dinâmica de memoria em pascal, essa é uma noção importante pois quando fazemos a + b em PI as coisa são muito simples, mas e quando fazemos n somas em sistema paralelo onde se faz necessário o armazenamento de informações? será usar um array uma solução ou problema?

Alocação e Desalocação de Variáveis Dinâmicas

Há uma função chamada new que dado um apontador cria uma variável dinâmica do tipo do apontador e faz com que o apontador tipado passado aponte para a variável criada.
new (<apontador-tipado>)
Para liberar a memória alocada pela função new, usa-se o procedimento dispose.
dispose (<apontador-tipado>)
Exemplo 5: Usando new e dispose para trabalhar com variáveis dinâmicas.type
   TItem = record
      Nome : String[20];
      Preco : real
   end;
var
   PItem, PAnterior : ^TItem;
begin
   New(PItem);
   PItem^.Nome := 'Livro de ED1';
   PItem^.Preco := 30.0;
   PAnterior := PItem;

   New(PItem);
   PItem^.Nome := 'Outro livro';
   PItem^.Preco := 10.0;

   writeln(PAnterior^.Nome);
   writeln(PAnterior^.Preco);

   writeln(PItem^.Nome);
   writeln(PItem^.Preco);

   Dispose(PAnterior);
   Dispose(PItem);

   PItem := nil;
   PAnterior := nil
end.



Exemplo 6: Usando variáveis dinâmicas para ler e guardar na memória uma lista de itens.type
   PItem = ^TItem;
   TItem = record
      Nome : string[20];
      Preco : real;
      Proximo : PItem
   end;
var
   Head : PItem;
   PNew : PItem;
   Resp : char;
begin
   Head := nil;

   repeat
      New(PNew);
      writeln('Digite o nome e o preco do Item:');
      readln(PNew^.Nome, PNew^.Preco);
      PNew^.Proximo := Head;
      Head := PNew;
      write('Outro Item (S/N)?');
      readln(Resp);
   until UpCase(Resp) = 'N';
end.
 Bom pessoal isso é pouco quanto ao conhecimento que cada um pode buscar, quem sabe não ensino listas,filas e pilhas nas próximas postagens abraço.
fontes :http://albertocn.sytes.net/2010-2/ed1/aulas/apontadores.htm
http://vidadeprogramador.com.br/2014/01/23/pouca-memoria/

Nenhum comentário:

Postar um comentário