Resumo Trabalho C
Artigos Científicos: Resumo Trabalho C. Pesquise 862.000+ trabalhos acadêmicosPor: bigow • 20/9/2014 • 941 Palavras (4 Páginas) • 385 Visualizações
Alocação Dinâmica de Memória
Até o momento, na declaração de um vetor para representar Listas, Filas e Pilhas, foi
preciso dimensioná-lo, o que nos obrigava, a saber, de antemão, quanto espaço seria
necessário, isto é, tínhamos de prover o número máximo de elementos no vetor durante
a codificação. Esse pré-dimensionamento é um fator limitante. Por exemplo, se
desenvolvermos um programa para calcular a média e a variância das notas de uma
prova, teremos de prever o número máximo de alunos. Uma solução é dimensionar o
vetor com um número absurdamente alto, para não termos limitações no momento da
utilização do programa. No entanto, isso levaria a um desperdício de memória, o que é
inaceitável em diversas aplicações. Se, por outro lado, formos modestos no pré-
dimensionamento do vetor, o uso do programa fica muito limitado, pois não
conseguiríamos tratar turmas com um número de alunos maior que o previsto.
Felizmente, a linguagem C oferece meios de requisitar espaços de memória em tempo
de execução. Dizemos que podemos alocar memória dinamicamente. Com esse recurso,
nosso programa para o cálculo da média e variância discutido antes pode, em tempo de
execução, consultar o número de alunos da turma e então fazer a alocação do vetor
dinamicamente, sem desperdício de memória.
Uso da memória
Informalmente, podemos dizer que existem três maneiras de reservar espaço de
memória para o armazenamento de informações:
A primeira é usar variáveis globais (e estáticas). O espaço reservado para uma variável
global existe quanto o programa estiver sendo executado.
A segunda maneira é usar variáveis locais. Nesse caso, o espaço existe apenas enquanto
a função que declarou a variável está sendo executada, sendo liberado para outros usos
quando a execução da função termina. Por esse motivo, a função que chama não pode
fazer referência ao espaço local da função chamada. As variáveis globais ou locais
podem ser simples ou vetores. Para os vetores, precisamos informar o número máximo
de elementos; caso contrário, o compilador não saberia o tamanho do espaço a ser
reservado.
A terceira maneira de reservar memória é requisitar ao sistema, em tempo de execução,
um espaço de um terminado tamanho. Esse espaço alocado dinamicamente permanece
Anhanguera Educacional
Estrutura de Dados - Prof. Ms. Thiago Salhab Alves
reservado até que seja explicitamente liberado pelo programa. Por isso, podemos alocar
dinamicamente um espaço de memória em uma função e acessá-lo em outra. A partir do
momento em que liberarmos o espaço, ele estará disponibilizado para outros usos e não
podemos mais acessá-lo. Se o programa não liberar um espaço alocado, ele será
automaticamente liberado quando a execução do programa terminar.
Na figura 1 abaixo, apresentamos um esquema didático que ilustra de maneira fictícia a
distribuição do uso da memória pelo sistema operacional. Quando requisitamos ao
sistema operacional para executar um determinado programa, o código em linguagem
de máquina do programa deve ser carregado na memória. O sistema operacional reserva
também os espaços necessários para armazenar as variáveis globais (e estáticas)
existentes no programa. O restante da memória livre é utilizado pelas variáveis locais e
pelas variáveis alocadas dinamicamente. Cada vez que uma determinada função é
chamada, o sistema reserva o espaço necessário para as variáveis locais da função. Esse
espaço pertence à pilha de execução e, quando a função termina, é desempilhado. A
parte da memória não ocupada pela pilha de execução pode ser requisitada
dinamicamente. Se a pilha tentar crescer além do espaço disponível existente, dizemos
que ela “estourou”, e o programa é abortado com erro. Da mesma forma, se o espaço de
memória livre for menor do que o espaço requisitado dinamicamente, a alocação não é
feita, e o programa pode prever um tratamento de erro adequado (por
...