Alocação Dinâmica em Linguagem C

730 visualizações

Publicada em

Alocação Dinâmica em Linguagem C

Publicada em: Software
  • Seja o primeiro a comentar

Alocação Dinâmica em Linguagem C

  1. 1. Alocação Dinâmica em Linguagem C LINGUAGEM C Alocação Dinâmica Glécio Rodrigues de Albuquerque glecioalbuquerque@gmail.com
  2. 2. Alocação Dinâmica em Linguagem C Conteúdo • Alocação Estática • Alocação Dinâmica • Malloc • Sizeof • Free • Alocação de Vetores • Alocação de Matrizes • Calloc • Realloc • Exercício
  3. 3. Alocação Dinâmica em Linguagem C Alocação Estática • Na execução de um programa geralmente precisamos armazenar dados temporariamente na memória. Para isso, lançamos mão das variáveis de memória. • As variáveis de memórias são declaradas através da determinação de um tipo de dado e seu identificador (nome), podendo ainda ser seguida de seu valor inicial (default).
  4. 4. Alocação Dinâmica em Linguagem C Alocação Estática • No exemplo anterior, as variáveis são definidas utilizando alocação estática. • Em tempo de compilação já é conhecida a quantidade de memória que será necessária para a execução do programa. • Ao iniciar o programa, toda a memória necessária para a sua execução será alocada. • Acontece que, às vezes, a quantidade de memória a alocar só se torna conhecida durante a execução do programa. Para lidar com essa situação é preciso recorrer à alocação dinâmica de memória.
  5. 5. Alocação Dinâmica em Linguagem C Alocação Dinâmica • A alocação dinâmica é o processo utilizado para se alocar memória em tempo de execução. • É utilizada quando não se sabe ao certo quanto de memória será necessário para o armazenamento dos dados, podendo ser determinado em tempo de execução conforme a necessidade do programa. • Outro ponto é a econômica de memória, já que é alocada apenas a quantidade de memória necessária para a operação. • A alocação dinâmica é muito utilizada em problemas de estruturas de dados, a exemplo de listas encadeadas e arvores, entre outros.
  6. 6. Alocação Dinâmica em Linguagem C Alocação dinâmica • Para trabalharmos com alocação dinâmica em linguagem C, fazemos uso das seguintes funções: • malloc • calloc • realloc • free • Além dessas funções, fazemos uso do operador sizeof. • Também, na alocação dinâmica, o conceito de ponteiros é bastante utilizado.
  7. 7. Alocação Dinâmica em Linguagem C • Ponteiro é um tipo de dado especial que armazena um endereço de memória. Possui um tipo e é precedido do simbolo “*”. • Exemplo de uso de um ponteiro e seu comportamento na memória: Ponteiros
  8. 8. Alocação Dinâmica em Linguagem C Malloc • A função malloc aloca um bloco de bytes consecutivos na memória do computador e devolve o endereço do primeiro byte desse bloco. • O número de bytes é especificado como argumento da chamada da função. • A função malloc retorna um ponteiro de tipo genérico, void *, cabendo ao programador fazer um type casting para o tipo apropriado. • No seguinte fragmento de código, malloc aloca 01 byte:
  9. 9. Alocação Dinâmica em Linguagem C Malloc • Neste outro código, a função malloc é utilizada para alocar espaço de memória para um valor inteiro e um valor double:
  10. 10. Alocação Dinâmica em Linguagem C Malloc • No caso de alocarmos espaço de memória pra um registro (struct), precisamos saber a quantidade total de bytes necessários para armazenar a estrutura na memória. • Para facilitar esta tarefa, fazemos uso do operador sizeof.
  11. 11. Alocação Dinâmica em Linguagem C Sizeof • O operador sizeof retorna um inteiro, informando o tamanho, em bytes, do tipo de dados passado como argumento:
  12. 12. Alocação Dinâmica em Linguagem C Sizeof • Exemplos anteriores aplicando o operador sizeof:
  13. 13. Alocação Dinâmica em Linguagem C NULL • Se a memória do computador já estiver toda ocupada, malloc não consegue alocar mais espaço e devolve NULL. • Convém verificar essa possibilidade antes de prosseguir:
  14. 14. Alocação Dinâmica em Linguagem C Free • As variáveis alocadas estaticamente dentro de um escopo de código são desalocadas automaticamente quando a execução do escopo termina. • Já as variáveis alocadas dinâmicamente continuam a existir mesmo depois que a execução do escopo termina. • Para liberarmos a memória ocupada por essas variáveis, é preciso recorrer à função free. • A função free recebe como parâmetro um ponteiro para o endereço inicial da memória que será desalocada.
  15. 15. Alocação Dinâmica em Linguagem C Free • A função free libera a porção de memória alocada por malloc. O comando avisa ao sistema que o bloco de bytes apontado por idade está livre. A próxima chamada de malloc poderá tomar posse desses bytes.
  16. 16. Alocação Dinâmica em Linguagem C Alocando Vetores • Como já vimos, é possível alocar, além de variáveis simples, estruturas mais complexas, a exemplo de registros. • É possível também trabalharmos dinâmicamente com outros tipos de estruturas, como por exemplo os vetores. • De acordo com a norma ANSI, o trecho de código a seguir não é a forma correta de se declarar um vetor, a menos que n seja uma constante, definida por const ou #define.
  17. 17. Alocação Dinâmica em Linguagem C Alocando Vetores • O exemplo a seguir mostra como podemos alocar e desalocar um vetor com n elementos inteiros durante a execução de um programa:
  18. 18. Alocação Dinâmica em Linguagem C Alocando Matrizes • Outra exemplo de estruturas onde podemos utilizar alocação dinâmica são as matrizes. • Matrizes bidimensionais são implementadas como vetores de vetores. • Uma matriz com n linhas e m colunas é um vetor onde cada elemento de n é um vetor de m elementos. • Isto significa que temos um vetor de n posições de poteiros, onde cada posição de n vai apontar para um vetor de m posições do tipo de dado da matriz.
  19. 19. Alocação Dinâmica em Linguagem C Alocando Matrizes • Exemplo da alocação dinâmica de uma matriz n x m:
  20. 20. Alocação Dinâmica em Linguagem C Desalocando Matrizes • Exemplo de desalocação da matriz n x m alocada anteriormente:
  21. 21. Alocação Dinâmica em Linguagem C Calloc • Assim como malloc, calloc tem a função de alocar espaços na memória. Sua principal diferença é que a mesma inicializa com zeros os bits das posições de memórias alocadas. • Outro ponto é que o uso de calloc facilita a alocação de estruturas como vetores e matrizes. • Está definida da seguinte forma: • A função calloc recebe como parâmetros dois inteiros sem sinal. O primeiro indica a quantidade de dados que se pretende alocar e o segundo, o tamanho, em bytes, de cada dado que será alocado.
  22. 22. Alocação Dinâmica em Linguagem C Calloc • No trecho de código a seguir é alocado um vetor de inteiros com 5 posições através da função calloc: • É importante observar que, da mesma forma como acontece com malloc, caso a alocação não seja efetivada, ao invés de retornar um ponteiro a função irá retornar o valor NULL.
  23. 23. Alocação Dinâmica em Linguagem C Realloc • A função realloc permite alocar ou realocar um espaço de memória. • Pode ser utilizada em casos onde se deseja aumentar ou diminuir o espaço de memória previamente alocado. • Está definida da seguinte forma: • A função recebe um ponteiro para o qual se deseja alocar ou realocar e a quantidade de memória, em bytes, necessária para a operação. • Assim como malloc e calloc, realloc retorna um ponteiro para o primeiro byte da memória alocada ou o valor NULL.
  24. 24. Alocação Dinâmica em Linguagem C Realloc • Exemplo de uso da função realloc:
  25. 25. Alocação Dinâmica em Linguagem C Realloc • Alocando e desalocando com realloc:
  26. 26. Alocação Dinâmica em Linguagem C Praticando 1. Escreva um programa que leia um número inteiro positivo n, indicando a quantidade de inteiros que serão lidos, e imprima-os em ordem invertida. Por exemplo, ao receber 5, 222, 333, 444, 555 e 666 seu programa deve imprimir 666, 555, 444, 333, 222 e 5
  27. 27. Alocação Dinâmica em Linguagem C Códigos e exercícios https://drive.google.com/folderview? id=0BxsDe2LkW3V2cExTTTE3YWhmLTg&usp=sharing
  28. 28. Alocação Dinâmica em Linguagem C Referências CPLUSPLUS. C Standard General Utilities Library. Disponível em: http://www.cplusplus.com/reference/cstdlib/. Acessado em: 10/07/2015. LINGUAGEMCDESCOMPLICADA. Linguagem C. Disponível em: https://programacaodescomplicada.wordpress.com/indice/lingua gem-c/. Acessado em: 10/07/2015. MEDINA, Marco. FERTIG, Cristina. Algoritmos e Programação: Teoria e prática. São Paulo: Novatec, 2006. SCHILDT, Herbert. C Completo e Total. 3.ed. Makron Books do Brasil Editora, São Paulo, 1996.
  29. 29. Alocação Dinâmica em Linguagem C Obrigado!!!

×