AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação...

21
Alocação Dinâmica e Apontadores Cláudio E. C. Campelo http://claudiocampelo.com

Transcript of AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação...

Page 1: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Alocação Dinâmica e Apontadores

Cláudio E. C. Campelo

http://claudiocampelo.com

Page 2: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Alocação Estática x Dinâmica

� Linguagens de programação como Pascal, C e C++ permitem dois tipos de alocação de memória: estática e dinâmica;

� Na alocação estática, o espaço de memória para as variáveis é reservado no início da execução, nãopodendo ser alterado depois;podendo ser alterado depois;

� int a; int b[20];

� Na alocação dinâmica, o espaço de memória paraas variáveis pode ser alocado dinamicamentedurante a execução do programa;

Page 3: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Alocação Estática x Dinâmica

� Em alocação estática, a quantidade total de

memória utilizada pelos dados é previamente

conhecida e definida de modo imutável; de outra

forma, diz-se que a alocação é dinâmica.forma, diz-se que a alocação é dinâmica.

� A forma mais natural de armazenar uma lista

dentro do computador é a alocação seqüencial

Page 4: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Alocação Estática x Dinâmica

� A maior vantagem no uso de uma área seqüencial de memória é que, dado o endereço inicial da área alocada e o índice de um elemento qualquer da lista, podemos acessá-lo imediatamente, com um simples e rápido imediatamente, com um simples e rápido cálculo.

� O grande problema está em não poder redimensionar o uso de memória de uma estrutura, ou seja, deve ser conhecido previamente e de tamanho imutável.

Page 5: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Alocação Estática x Dinâmica

� O ponto fraco da alocação estática aparece

quando precisamos inserir ou apagar elementos

no meio do vetor, o vetor deve ser rearranjado;

� A diferença da alocação seqüencial dinâmica em

relação à estática está somente na possibilidade

da dinâmica poder redimensionar o uso da

memória, se necessário.

Page 6: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Alocação Dinâmica

� A memória alocada dinamicamente é acessadaatravés de Apontadores (pointers), que na verdadesão variáveis que armazenam o endereço de umaárea de memória;

� A memória alocada dinamicamente faz parte de umaárea de memória chamada de heap;

� Durante a execução, o programa aloca e desalocaporções de memória do heap;

Page 7: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Alocação Dinâmica

Page 8: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Apontadores – Notação em C

Page 9: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Alocação Dinâmica

Page 10: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Alocação Dinâmica - Erros Comuns

� Esquecer de alocar memória e querer acessar o conteúdo da variável;

� Copiar o valor do apontador ao invés do valor davariável apontada;

� Esquecer de desalocar memória

� Ela é desalocada ao fim do programa, procedimento oufunção onde a variável está declarada, mas pode ser um problema em loops

� Tentar acessar o conteúdo da variável depois de desalocá-la;

Page 11: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Alocação Dinâmica

� Exercício: o que vai ser impresso?

Page 12: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Apontadores para tipos estruturados

� Apontadores são normalmente utilizados com tiposestruturados

Page 13: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Passagem de Parâmetros

� Em Pascal e C++, parâmetros para função podem ser passados por valor ou por referência;� Em pascal, um define-se que a passagem de um parâmetro é

por referência utilizando a palavra “var” antes do parâmetro;

� Por valor: o parâmetro formal (recebido comoparâmetro) é uma cópia do parâmetro real (passado nachamada);chamada);

� Por referência: o parâmetro formal (recebido comoparâmetro) é uma referência do parâmetro real (passado na chamada);� As modificações efetuadas acontecem no parâmetro real;

� Em C só existe passagem por valor, logo deve-se utilizara passagem por referência utilizando-se apontadores;

Page 14: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Passagem de Parâmetros

Page 15: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Apontadores – Notação em Pascal

� Em Pascal, o funcionamento de ponteiros é parecido com o do pseudocódigo.

� Declaração:

� var variável: ^tipo;

� Operador de endereço:@

� Ponteiro nulo: nil;

� Operador de conteúdo:^

Page 16: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Ponteiros em Pascal

Exemplo 1

var

x:integer;

p,q:^integer;

x := 10;x := 10;

p := @x;

q := p;

q^ := p^ + 10;

writeln('Resultado = ‘,p^);

Resultado = 20

Page 17: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Ponteiros em Pascal

Exemplo 2

type

pont_rec = ^rec;

rec = record

dado: real;dado: real;

pont: pont_rec;

end;

var

x,x1:rec;

p,q : pont_rec;

Page 18: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Ponteiros em Pascal

Exemplo 2

var

x,x1:rec;

p,q :pont_rec;

x.valor := 10.5;

p := @x;p := @x;

x.pont := @x1;

x1.valor := 0.2;

q := x.pont;

x1.pont := nil;

writeln(p^.valor)

writeln(q^.valor)

writeln(p^.pont^.valor)

writeln(x.valor)

writeln(x.pont^.valor)

writeln(x1.valor)

10.5

0.2

0.2

10.5

0.2

0.2

Page 19: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Ponteiros em Pascal

Alocando espaço na Heap

� Em Pascal, a operação que aloca memória é implementada por uma função, na forma:� new(p);

� que tem o mesmo efeito da operação reserve do pseudo-código.

� Em Pascal, a operação que libera memória é � Em Pascal, a operação que libera memória é implementada por uma função, na forma:� dispose(p);

� que tem o mesmo efeito da operação libere do pseudo-código.

Page 20: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Ponteiros em Pascal

Exemplo 3

var

p,q:^integer;

new(p);

p^ := 10;

q := p;

q^ := p^ + 10;

writeln("Resultado = ",p^);

dispose(p);

q := nil;

Resultado = 20

Page 21: AulaAlocacaoDinamicaEPonteiros.ppt [Modo de …jndm/edados/slides/ClaudioCampe...Alocação Estática x Dinâmica Em alocação estática, a quantidade total de memória utilizada

Referências Bibliográficas

� Rosane Minghim. Curso de Introdução à Ciência da Computação. ICMC/USP. www.icmc.usp.br/~sce6001/aulas/aula18_ponteiros_pascal_2005.pdf

� Alexandre Rossini. Curso de Estrutura De Dados. Universidade Católica de Tocantins.Católica de Tocantins.

http://si.catolica-to.edu.br/documentos/02020997/Aula%204.pdf

� Jussara Almeida . Curso de Algoritmos e Estruturas de Dados II. DCC/UFMG.

http://www2.dcc.ufmg.br/disciplinas/aeds2_turmaA1/alocacao-dinamica.pdf