Alocação dinâmica de memoria.
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.
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.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.
fontes : http://albertocn.sytes.net/2010-2/ed1/aulas/apontadores.htm
http://vidadeprogramador.com.br/2014/01/23/pouca-memoria/
Post a Comment