Programação - memória dinâmica
Memória Dinâmica
Programação - Eng. Automóvel
1
Alocação estática de memória
A alocação estática de memória é efectuada quando é declarada uma dada variável;
A libertação do espaço de memória, ocupado por essa variável é efectuada no final do bloco de instruções onde foi efectuada a sua declaração.
2
Programação - Eng. Automóvel
Alocação estática de memória
Exemplo
void main() { int x; //reserva memória para guardar um inteiro ...
} // é libertada toda a memória reservada
Programação - Eng. Automóvel 3
Alocação estática de memória
Exemplo
void funcao( int x, char *z, ...) //reserva memória { int y; //reserva memória ...
} // é libertada toda a memória reservada
Programação - Eng. Automóvel 4
Alocação dinâmica de memória
A alocação dinâmica de memória permite efectuar a alocação (reserva) e libertação de memória sempre e apenas quando for necessário.
Programação - Eng. Automóvel
5
Função malloc
A alocação de memória em C pode ser efectuada através da função malloc: void *malloc(size_t numero_bytes)
Esta função aloca um bloco de memória contíguo com numero_bytes, e devolve um ponteiro para o início desse bloco, ou NULL no caso de não existir memória suficiente.
6
Programação - Eng. Automóvel
Função malloc
Forma geral de utilização da função malloc:
(tipo *) malloc(n * sizeof(tipo)) Livrarias: alloc.h ou stdlib.h
Programação - Eng. Automóvel
7
Função malloc - exemplo char *pc;
... pc = (char *) malloc (100 * sizeof(char));
Operação de casting, pois a função malloc devolve um ponteiro genérico para void
...
Nota: Reserva 100 bytes de memória e coloca pc a apontar para o 1º byte reservado
Programação - Eng. Automóvel 8
Função malloc - exemplo pc 100 bytes
pc
*pc
*(pc+1)
...
Programação - Eng. Automóvel
100 bytes
*(pc+99)
9
Função malloc - exemplo int *pi; ...
pi
*pi *(pi+1)
pi = (int *)