Beruflich Dokumente
Kultur Dokumente
2 Introdução
int v[1000]
Espaço contíguo na memória para 1000 valores inteiros
Se cada int ocupa 4 bytes, 4000 bytes, ~4KB
char v[50]
Espaço contíguo na memória para 50 valores do tipo char
Se cada char ocupa 1 byte, 50 bytes
5 Introdução
VLAs não são criadas na memória estática (por não ter tamanho fixo),
e sim na pilha, dividindo espaço com variáveis locais e chamadas
recursivas de funções.
Como elas não são criadas dinamicamente, elas não ficam na área de
heap.
Economia de 94 bytes!
Alocação dinâmica
10
Porém Nº1!
A memória ocupada por um determinado tipo pode variar de máquina pra
máquina.
Seu código deve ser independente de máquina!
Porém Nº2!
MEMÓRIA NÃO É INFINITA! Se a memória do computador estiver toda
ocupada, malloc( ) não consegue alocar mais espaço e retorna NULL.
Usar um ponteiro nulo travará seu computador na maioria dos casos!
Cuidado!
O gerenciamento incorreto de memória pode causar um programa a
estourar todo o espaço disponível de memória.
Um malloc mal implementado em QUALQUER lugar do código pode causar
erros fatais.
Este pequeno
código acaba
com TODA a
memória do
computador!
Free
17
Código anterior
corrigido
Free
19
Calloc( )
void *calloc (<tamanho> ,<quantidade_de_bytes_desejada>)
Mesma funcionalidade do
malloc( )
Realloc( )
(tipo) *realloc ( tipo *<ponteiro> ,<novo_tamanho>)
Modifica o tamanho de um bloco de memória já alocado.
Realloc( )
Exemplo: Alocando uma struct
30