Baixe o app para aproveitar ainda mais
Prévia do material em texto
AED Alocação dinâmica de memória e Ponteiros PUC Minas Curso de Sistemas de Informação Baseado no material do Prof. João Caran AED: Alocação Dinâmica � Memória de um computador: o que é? � "Caixas" para armazenamento de valores � Podemos vê-la como um imenso array de bytes � Esse array conterá código e dados dos processos do sistema AED: Alocação Dinâmica � Como acessamos a memória? � Declaração de variáveis � Mas as variáveis são uma abstração: um programa armazena endereços de memória − i: 0 − j: 2 − nome: 4 32 1 26 J0 a o \0 $o p u c% i j nome AED: Alocação Dinâmica � Ao utilizarmos uma variável, o programa na verdade vai até ao endereço indicado pelo seu nome. � Ou seja, cada posição de memória tem um endereço e um valor 32 1 26 P0 i j nome 0 1 2 3 4 5 6 7 8 9 u l o Ma AED: Alocação Dinâmica � O tamanho de cada variável depende de seu tipo ou classe � Ex: − inteiro: 4 bytes − char: 2 bytes − byte: 1 byte − strings: ?? − objetos: ?? AED: Alocação Dinâmica � Ponteiro: � É uma variável que armazena um endereço de memória, ou seja, aponta para outra variável. � Utilizado, por exemplo, na passagem de parâmetros por referência. � Analogia: − placas de sinalização − papel contendo um endereço AED: Alocação Dinâmica � Ex: � Variável "local": ponteiro com endereço 11. � Qual o valor exibido pela variável? � E se alterarmos o valor da variável? � E se quisermos alterar o valor ao qual ela referencia? 32 1 26 J0 a o \0 $o p u c 11% i j nome local 0 1 2 3 4 5 6 7 8 9 10 11 AED: Alocação Dinâmica � Perigos no uso de ponteiros: � Espaços de memória não utilizados; � Não desalocar memória; � Sobrescrever áreas indevidamente; � Declaração explícita de ponteiros � uso de * � referência: uso de & AED: Alocação Dinâmica � Por padrão, o uso direto de ponteiros em C# é considerado inseguro (unsafe) e, assim, desabilitado � Referência: uso protegido de ponteiros � Ex: − parâmetros "ref" − objetos e vetores em C#; AED: Alocação Dinâmica � Alocação dinâmica de memória � Alocar memória dinamicamente de acordo com a necessidade do programa; � Ex: − Ao criar uma turma, quantos alunos ela irá receber? − E se, depois de criada, a turma ainda receber mais 5 alunos que se matricularam posteriormente? AED: Alocação Dinâmica � Alocação dinâmica de memória: � Uma estrutura de dados tem capacidade de instanciar dinamicamente um objeto/variável e apontar para ele (ou seja, incluí-lo na estrutura). Joao 1001235 Jose 753215 Nome Mat Nota Prox Nome Mat Nota Prox AED: Alocação Dinâmica � Alocação dinâmica de memória � Desta forma, é possível criar uma estrutura de dados dinâmica – aquela cujo tamanho pode variar ao longo da execução do programa Exemplo
Compartilhar