Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas...
-
Upload
maria-de-belem-martinho-da-fonseca -
Category
Documents
-
view
219 -
download
2
Transcript of Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas...
![Page 1: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/1.jpg)
![Page 2: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/2.jpg)
![Page 3: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/3.jpg)
Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas
durante a execução de um programa. Declaração -> Indireta Vinculação -> Por meio de ponteiros Vantagens
![Page 4: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/4.jpg)
Mapa de memória de um computador padrão IBM-PC
![Page 5: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/5.jpg)
Sua posição de memória armazena um endereço de outra posição de memória, que por sua vez pode conter um dado. Não armazena um dado.
Notação utiliza ^ Exemplos:
Var P_nome : ^string; P_idade : ^integer; P_salario : ^real;
![Page 6: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/6.jpg)
Exemplos: write(‘Idade = ‘,P_idade^);
Sugestão: Padronização de nomes Ponteiro vazio é preenchido com NIL Operador @
Ex: P_idade := @idade; (Acessa o endereço da posição de memória
referenciada)
![Page 7: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/7.jpg)
Exemplo: Criação de um ponteiro apontando para uma
variável inteira. Criação de um ponteiro apontando para uma variável
real.
Exercicios: Declare 2 variáveis inteiras e dois ponteiros
para inteiros que devem ser associados ao endereço das variáveis. Usando somente os ponteiros faça com que as variáveis recebam o dobro e o triplo de seu valor respectivamente,
![Page 8: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/8.jpg)
Memória alocada conforme a necessidade
EvitaDESPERDÍCIO DE MEMÓRIA
XMEMÓRIA INSUFICIENTE
Quantidade de memória pode ser determinada em tempo de execução
![Page 9: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/9.jpg)
Procedimento new(ponteiro) Aloca espaço de memória alta para
armazenar uma variável alocada dinamicamente por vez.
![Page 10: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/10.jpg)
IMPORTANTE: Sempre que um espaço de memória for alocado dinamicamente, ele tem que ser liberado explicitamente. Ou seja a cada new, deve corresponder um dispose, pois o espaço de memória alocado explicitamente não será liberado automaticamente.
Procedimento dispose(ponteiro) Libera o espaço de memória,
endereçada pelo ponteiro, existente na área de memória (HEAP).
![Page 11: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/11.jpg)
MemAvail Exibe a quantidade total de memória livre no
HEAP, ou seja a soma de todos os blocos de memória livres.
Procedimento MaxAvail Retorna o tamanho do maior bloco contínuo
de memória no HEAP. Este valor corresponde ao maior tamanho possível de variável dinâmica que pode ser alocado a qualquer tempo.
Obs: Estas funções estão disponíveis apenas no Turbo Pascal.
![Page 12: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/12.jpg)
Ex: 1)Aloque dinamicamente duas variáveis
do tipo inteiro. Leia dois valores nestas variáveis. Verifica se o valor de A é maior que B. Em caso afirmativo exiba o quociente de A dividido por B.
2) Leia 5 valores e apresente o total da soma dos mesmos. Crie dinamicamente a variável que irá receber os valores. Exiba a quantidade de memória antes e depois da alocação de memória para a variável e depois da liberação da mesma.
![Page 13: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/13.jpg)
GetMem Também é usado para alocar dinamicamente
espaço de memória para uma variável. Gerencia melhor o espaço de memória. A variável criada pode ter o número de bytes especificado pelo programador.
Sintaxe GetMem(ponteiro,numero_de_bytes);
Ex: GetMem(P_nome, 30);GetMem(P_total, 20);
Como saber quantos bytes reservar? Sizeof(tipo)
![Page 14: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/14.jpg)
Função útil na alocação de blocos de memória:
SizeOf Retorna o número de bytes ocupados por um
argumento (funciona tanto no Pascal como no Delphi).
![Page 15: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/15.jpg)
FreeMem => Destrói uma variável criada dinamicamente, liberando seu espaço de memória. Deve ser usada em conjunto com GetMem.
Ex: FreeMem(P_nome, 30); FreeMem(P_total, 20);
Obs: Especificar exatamente a mesma quantidade de bytes que foi alocada.
![Page 16: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/16.jpg)
Alocação dinâmica de memória na verdade tem uma grande utilidade para alocação de blocos de dados. Até agora vimos como fazer a alocação apenas de uma variável por vez. Veremos como trabalhar com vetores e matrizes alocados dinamicamente.
![Page 17: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/17.jpg)
Características Satisfaz a necessidade de criarmos uma
matriz com uma quantidade de elementos desconhecida em tempo de projeto.
Deve-se criar um tipo matriz. Pode-se usar a constante MaxInt pré-
definida. Declara-se uma variável que seja do
tipo ponteiro para o tipo matriz criado. Faz-se alocação dinâmica de memória
usando-se GetMem e SizeOf.
![Page 18: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/18.jpg)
Ex de criação do tipo e declaração do ponteiro:
Type P_mat = ^vetor; vetor = array[1..MaxInt] of integer; matriz = array[1..181,1..181];Var aponta : P_mat; aponta_mat : ^matriz;
![Page 19: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/19.jpg)
Ex. de alocação dinâmica da memória do vetor:
getMem(aponta, N * SizeOf(integer)); Onde N é a quantidade de elementos que se
deseja no vetor
Ex. de utilização dos elementos do vetor:for x:= 1 to N do writeln(aponta^[x]);
![Page 20: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/20.jpg)
Ex. de alocação dinâmica da memória da matriz:
getMem(aponta, L * C * SizeOf(integer)); Onde L é a quantidade de linhas que se deseja na
matriz e C é a quantidade de colunas.
Ex. de utilização dos elementos da matriz:for x:= 1 to L do for y := 1 to C do writeln(aponta_mat^[x,y]);
![Page 21: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/21.jpg)
Liberando a memória do vetorfreeMem(aponta,N * SizeOf(integer));
Liberando a memória da matrizfreeMem(aponta_mat, L * C *
SizeOf(integer));
![Page 22: Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta.](https://reader035.fdocumentos.tips/reader035/viewer/2022062502/570638621a28abb8239004f9/html5/thumbnails/22.jpg)
• Leia um número inteiro N e aloque dinamicamente memória para um vetor de N inteiros. Leia os valores do vetor e exiba a média dos valores lidos.