TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Alocação de Memória

Artigo: Alocação de Memória. Pesquise 862.000+ trabalhos acadêmicos

Por:   •  25/11/2013  •  Artigo  •  988 Palavras (4 Páginas)  •  239 Visualizações

Página 1 de 4

Alocação de Memória

Todo programa precisa utilizar memória para ser executado. Quando um programa inicia sua execução, ele começa a solicitar memória ao sistema operacional, ou seja, faz a alocação de memória necessária para a sua execução. Nem sempre a memória alocada na iniciação do programa é suficiente, então o programa também precisa alocar memória durante a sua execução.

A linguagem C permite dois tipos de alocação de memória: Alocação estática e alocação dinâmica.

Alocação Estática de Memória

Na alocação estática o espaço de memória, que as variáveis irão utilizar durante a execução do programa, é definido no processo de compilação. Não sendo possível alterar o tamanho desse espaço durante a execução do programa.

Exemplos:

/*Espaço reservado para um valor do tipo char. O char ocupa 1 byte na memória.*/

char a;

/*Espaço reservado para dez valores do tipo int. O int ocupa 4 bytes na memória, portanto 4x10=40 bytes.*/

int vetor[10];

/*Espaço reservado para nove(3x3) valores do tipo double. O double ocupa 8 bytes na memória, portanto 3x3x8=72 bytes.*/

double matriz[3][3];

Este tipo de alocação é utilizado quando se sabe de antemão a quantidade de memória que será utilizada pelo programa.

Alocação Dinâmica de Memória

Na alocação dinâmica o espaço de memória, que as variáveis irão utilizar durante a execução do programa, é definido enquanto o programa está em execução. Ou seja, quando não se sabe ao certo quanto de memória será necessário para o armazenamento das informações, podendo ser determinadas, sob demanda, em tempo de execução conforme a necessidade do programa.

No padrão C ANSI existem quatro funções para alocação dinâmica de memória:

1. malloc()

2. calloc()

3. realloc()

4. free()

Todas elas pertencem a biblioteca <stdlib.h>. Iremos nos concentrar nas funções malloc() e free(), pois são as mais utilizadas.

Sintaxe da função malloc():

void *malloc(size_t num_bytes);

Esta função recebe como parâmetro "num_bytes" que é o número de bytes de memória que se deseja alocar. O tipo size_t é definido em stdlib.h como sendo um inteiro sem sinal. O interessante é que esta função retorna um ponteiro do tipo void podendo assim ser atribuído a qualquer tipo de ponteiro.

Exmeplo:

int *vetor;

vetor = malloc(100);

No exemplo acima foram alocados, dinamicamente, cem bytes da memória Heap. Quando os programas alocam memória dinamicamente, a biblioteca de execução C recebe memória a partir de um reservatório de memória livre (não utilizado) chamado Heap.

A função malloc() devolve um ponteiro do tipo void, desta forma pode-se atribuí-lo a qualquer tipo de ponteiro. Portanto, precisamos fazer uma conversão (cast) para o tipo desejado e também alocar um espaço compatível com o tipo de destino. A alocação para atender a essas necessidades deve ser feita desta forma:

vetor = (int *) malloc (100*sizeof(int));

Como a memória ocupada por um determinado tipo pode variar de máquina para máquina, devemos utilizar o operador sizeof, que retorna o tamanho do parâmetro informado.

Como foi descrito anteriormente, a memória alocada é obtida da memória Heap. Contudo, não há garantias de que a Heap possua memória disponível para o seu programa. Portanto, é necessário verificar se existe espaço suficiente na Heap para alocar a memória desejada. Para atender a este requisito, devemos fazer um teste para verificar se a memória foi realmente alocada.

Exemplo:

vetor = (int *) malloc (100*sizeof(int));

if (vetor == NULL){

printf ("Não há memória suficiente para alocação");

exit(1);

}

Quando a função malloc não consegue alocar memória, pois não há espaço suficiente na Heap, a mesma retorna NULL, indicando que a requisição de memória foi negada. Quando a alocação é feita com sucesso, malloc retorna um ponteiro para a região de memória alocada.

Sintaxe da função free():

void free

...

Baixar como (para membros premium)  txt (7 Kb)  
Continuar por mais 3 páginas »
Disponível apenas no TrabalhosGratuitos.com