Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Jean Carlo Mendes www.codifique.net aed2@codifique.net
2
Uso da memória: Variáveis globais (estáticas) Espaço reservado para uma variável global existe enquanto o programa estiver em execução Variáveis locais Espaço existe apenas enquanto a função que declarou a variável está sendo executada Espaço liberado para outros usos quando a execução da função termina Variáveis globais ou locais podem ser simples ou vetores Para o caso de vetores, informa-se o tamanho máximo de elementos que ele pode armazenar (o compilador usa esta informação para reservar o espaço de memória)
3
Uso da memória: Alocação dinâmica Espaço de memória é requisitado em tempo de execução Espaço permanece reservado até que seja explicitamente liberado Depois de liberado, este espaço estará disponível para outros usos (e não pode ser mais acessado) Espaço alocado e não liberado explicitamente será liberado automaticamente ao final da execução do programa
4
Uso da memória: Memória estática Código do programa Variáveis globais Variáveis Estáticas Memória dinâmica Variáveis alocadas dinamicamente Memória livre Variáveis locais Memória estática Código do programa Variáveis globais e variáveis estáticas Memória dinâmica Variáveis alocadas dinamicamente Memória livre Variáveis locais (Pilha de execução)
5
Uso da memória: Alocação dinâmica Usa a memória livre Se o espaço livre for menor que o requisitado na alocação, gera erro (precisa ser tratado) Pilha de execução Utilizada para alocar a memória quando ocorre chamada de função Sistema reserva o espaço para as variáveis locais da função Quando a função terminar o espaço é liberado (desempilhado) Se a pilha tentar crescer mais que o espaço disponível o programa termina com erro Memória estática Código do programa Variáveis globais e variáveis estáticas Memória dinâmica Variáveis alocadas dinamicamente Memória livre Variáveis locais (Pilha de execução)
6
A biblioteca “stdlib.h” fornece uma séria de funções pré-definidas para se trabalhar com alocação dinâmica
7
void * malloc (int numeroBytes); void free (void *p); Código do Programa Variáveis Globais e Estáticas Memória Alocada Dinamicamente Pilha Memória Livre
8
Função “malloc” Recebe como parâmetro o número de bytes que se deseja alocar Retorna um ponteiro “genérico” para o endereço inicial da área de memória alocada (se houver espaço livre) Ponteiro genérico é representado por void* Ponteiro é convertido automaticamente para o tipo apropriado Ponteiro pode ser convertido explicitamente Retorna um endereço nulo se não houver espaço livre Representado pelo símbolo NULL
9
Função “sizeof” Retorna o número de bytes ocupado por um tipo Função “free” Recebe como parâmetro o ponteiro da memória a ser liberada A função free deve receber um endereço de memória que tenha sido usado para alocação dinâmica (com o malloc)
10
Exemplo Alocação dinâmica de memória para um vetor capaz de armazenar 10 valores do tipo inteiro malloc retorna o endereço da memória alocada para armazenar valores inteiros Ponteiro de inteiro recebe o endereço inicial para o espaço alocado int *v; v = (int *) malloc (10 * sizeof(int));
11
int *v; v = (int *) malloc (10 * sizeof(int));
12
v armazena o endereço inicial de uma área contígua de memória (suficiente para armazenar 10 valores inteiros) v pode ser tratado como um vetor declarado estaticamente v aponta para o início da área alocada v[0] acessa o espaço do primeiro elemento v[1] acessa o espaço do segundo elemento v[9] acessa o espaço alocado para o último elemento
13
Tratamento de erro para o malloc Imprime a mensagem de erro Aborta a execução (exit)
14
Revistando o exemplo de ponteiros....
15
Erro na atribuição *p=3 Utiliza a memória apontada por p para armazenar o valor 3 sem que a área de memória seja alocada Armazena 3 em um espaço de memória não conhecido
16
Reservado o espaço de 1 inteiro para p Atribuição realizada com sucesso
17
Exercício !
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.