Podem ser divididas em Variveis estticas Variveis dinmicas
- Slides: 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 Vinculação -> Por meio de ponteiros Vantagens
Mapa de memória de um computador padrão IBM-PC
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;
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)
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,
Memória alocada conforme a necessidade Evita DESPERDÍCIO DE MEMÓRIA X MEMÓRIA INSUFICIENTE Quantidade de memória pode ser determinada em tempo de execução
Procedimento new(ponteiro) Aloca espaço de memória alta para armazenar uma variável alocada dinamicamente por vez.
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).
Mem. Avail Exibe a quantidade total de memória livre no HEAP, ou seja a soma de todos os blocos de memória livres. Procedimento Max. Avail 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.
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.
Get. Mem 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 Get. Mem(ponteiro, numero_de_bytes); Ex: Get. Mem(P_nome, 30); Get. Mem(P_total, 20); Como saber quantos bytes reservar? Sizeof(tipo)
Função útil na alocação de blocos de memória: Size. Of Retorna o número de bytes ocupados por um argumento (funciona tanto no Pascal como no Delphi).
Free. Mem => Destrói uma variável criada dinamicamente, liberando seu espaço de memória. Deve ser usada em conjunto com Get. Mem. Ex: Free. Mem(P_nome, 30); Free. Mem(P_total, 20); Obs: Especificar exatamente a mesma quantidade de bytes que foi alocada.
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.
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 Max. Int 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 Get. Mem e Size. Of.
Ex de criação do tipo e declaração do ponteiro: Type P_mat = ^vetor; vetor = array[1. . Max. Int] of integer; matriz = array[1. . 181, 1. . 181]; Var aponta : P_mat; aponta_mat : ^matriz;
Ex. de alocação dinâmica da memória do vetor: get. Mem(aponta, N * Size. Of(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]);
Ex. de alocação dinâmica da memória da matriz: get. Mem(aponta, L * C * Size. Of(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]);
Liberando a memória do vetor free. Mem(aponta, N * Size. Of(integer)); Liberando a memória da matriz free. Mem(aponta_mat, L * C * Size. Of(integer));
• 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.
- Modelo logit ordenado
- Actividades de los gitanos
- Dinmicas
- Dinmicas
- Tabla de diferencias divididas de newton
- As práticas corporais de aventura são divididas em
- Ser feliz não deve ser segredo deve ser sagrado
- Dado o quadro de pares ordenados
- Como os carboidratos podem ser classificados
- Nacimos para ser felices no perfectos
- Ser espirita não é ser nenhum religioso
- Porque se dice que el hombre es un ser inacabado
- Queria ser poeta mas poeta não posso ser
- Soy, eres, es, somos, sois, son
- Ser o no ser marketing
- Sitio jerimum enem 2017
- Certas ondas podem sofrer amortecimento
- Podem algorithm
- Ser dedicado y especial
- Ser professor em portugal
- El ser humano puede vivir aislado de los demás
- Ser y estar practice
- Qué duro