Baixe o app para aproveitar ainda mais
Prévia do material em texto
Variáveis e Constantes: Armazenamento Prof. Saulo C. Campos Variáveis • Variáveis são as entidades mais importantes da programação imperativa. “Uma vez que o programador tenha entendido o uso de variáveis, ele entendeu a essência da programação” (Dijkstra). • Uma variável é abstração da célula (ou células) de memória que armazena o estado de uma entidade de programação. • A variável armazena um valor que pode ser atualizado ou inspecionado sempre que necessário. Variáveis • O uso de variáveis permitiu que o problema de endereçamento absoluto fosse resolvido. Além disso, possibilitou o uso de nomes (o que deixa o programa mais legível). • Uma variável possui as seguintes propriedades: – Nome; – Endereço; – Tipo; – Valor; – Tempo de vida; – Escopo. Variáveis • Variáveis compostas podem ser acessadas, inicializadas e atualizadas de forma completa ou seletiva. struct data { int d, m, a; }; struct data f = { 12 , 7, 1984 }; struct data g; g = f; g.m = 17; // mês que não existe Constantes • Constantes são entidades de programação que armazenam valores, porém não permitem sua atualização. • Constantes possuem as mesmas propriedades das variáveis. const float PI = 3.1416; const int YY = 3; const int * z; // ponteiro de constante char l = 'g'; char x = 9; int *w = &3; // erro aqui pi = 5.55; // erro aqui YY=4; YY++; x=&YY; // erro aqui z = &YY; float area = pi * YY * YY; Armazenamento • Gerencia de memória: – Estática versus dinâmica. • O sistema operacional fica encarregado pela gerência de memória, porém as LP devem fazer uso do mecanismo de gerência de memória. • A forma mais comum de implementar o uso da gerencia de memória dinâmica vem o ALGOL. Consiste em dividir a memória de dados em duas áreas: – Heap – Pilha Armazenamento • A pilha é utilizada para resolver problemas e alocação de subprogramas recursivos e alocação de variáveis locais. • Todas as vezes que se faz uma chamada de um subprograma ou há necessidade da execução de uma novo bloco de código, é reservado, no topo da pilha, memória suficiente para variáveis locais. • Quando o subprograma ou bloco é encerrado a memória é liberada fazendo uma operação pop na pilha. Armazenamento • O uso da pilha resolve o problema de alocação dinâmica considerando variáveis locais. Mas não resolve o problema de instruções que aumentam o tamanho da memória de uma variável já alocada. • Para isso, é utilizada a área de heap (também conhecida como monte). • A área heap não segue regras como a área de pilha e é destinada armazenar qualquer variável que demande mais espaço. Armazenamento Armazenamento Gerenciamento da Pilha • A gerencia da pilha nas LP like-ALGOL ocorre por meio do uso de Registros de Ativação (RA) de subprogramas. Sendo assim, cada nodo da pilha é formado por um RA, com os seguintes campos: Pilha de Registros de Ativação • Constantes locais: armazena valores de constantes locais. • Variáveis locais: armazena as variáveis locais. • Parâmetros: armazena os parâmetros da função. • Elo dinâmico: referência para a base do registro de ativação anterior. • Elo estático: referência para a base do RA do subprograma onde o subprograma corrente foi definido. • Endereço de retorno: armazena o endereço da próxima instrução a ser executada quando o subprograma terminar. Pilha de Registros de Ativação • Constantes locais: armazena valores de constantes locais. • Variáveis locais: armazena as variáveis locais. • Parâmetros: armazena os parâmetros da função. • Elo dinâmico: referência para a base do registro de ativação anterior. • Elo estático: referência para a base do RA do subprograma onde o subprograma corrente foi definido. • Endereço de retorno: armazena o endereço da próxima instrução a ser executada quando o subprograma terminar. Gerência do Heap (Monte) • É menos eficiente e varia de acordo com a LP. • Uma das formas é utilizar duas listas de controle com informações a respeito dos espaços de memória livre e ocupados. – LED – Lista de Espaços Livres – LEO – Lista de Espaços Ocupados • Quando há demanda por memória, percorre-se a LED e verifica um espaço onde a variável possa ser alocada. Então atualiza-se a LEO (recebe um novo registro) e a LED (exclui o registro). Gerência do Heap (Monte) • Parte da gerência do Heap depende do programador ou da LP, pelo fato de ser necessário efetuar a liberação da memória. – Liberação explicita – Liberação automática (coletor de lixo) Memória secundária • Tipos de memória secundária – Banco de dados – Arquivos • Persistência é o termo aplicado para descrever a gravação de uma variável em memória secundária.
Compartilhar