Alocação Dinâmica em Linguagem C
LINGUAGEM C
Alocação Dinâmica
Glécio Rodrigues de Albuquerque
glecioalbuquerque@gmail.com
Alocação Dinâmica em Linguagem C
Conteúdo
• Alocação Estática
• Alocação Dinâmica
• Malloc
• Sizeof
• Free
• Alocação de V...
Alocação Dinâmica em Linguagem C
Alocação Estática
• Na execução de um programa geralmente precisamos
armazenar dados temp...
Alocação Dinâmica em Linguagem C
Alocação Estática
• No exemplo anterior, as variáveis são definidas utilizando
alocação e...
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 ...
Alocação Dinâmica em Linguagem C
Alocação dinâmica
• Para trabalharmos com alocação dinâmica em linguagem
C, fazemos uso d...
Alocação Dinâmica em Linguagem C
• Ponteiro é um tipo de dado especial que armazena um
endereço de memória. Possui um tipo...
Alocação Dinâmica em Linguagem C
Malloc
• A função malloc aloca um bloco de bytes consecutivos
na memória do computador e ...
Alocação Dinâmica em Linguagem C
Malloc
• Neste outro código, a função malloc é utilizada para
alocar espaço de memória pa...
Alocação Dinâmica em Linguagem C
Malloc
• No caso de alocarmos espaço de memória pra um
registro (struct), precisamos sabe...
Alocação Dinâmica em Linguagem C
Sizeof
• O operador sizeof retorna um inteiro, informando o
tamanho, em bytes, do tipo de...
Alocação Dinâmica em Linguagem C
Sizeof
• Exemplos anteriores aplicando o operador sizeof:
Alocação Dinâmica em Linguagem C
NULL
• Se a memória do computador já estiver toda ocupada,
malloc não consegue alocar mai...
Alocação Dinâmica em Linguagem C
Free
• As variáveis alocadas estaticamente dentro de um
escopo de código são desalocadas ...
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 si...
Alocação Dinâmica em Linguagem C
Alocando Vetores
• Como já vimos, é possível alocar, além de variáveis
simples, estrutura...
Alocação Dinâmica em Linguagem C
Alocando Vetores
• O exemplo a seguir mostra como podemos alocar e
desalocar um vetor com...
Alocação Dinâmica em Linguagem C
Alocando Matrizes
• Outra exemplo de estruturas onde podemos utilizar
alocação dinâmica s...
Alocação Dinâmica em Linguagem C
Alocando Matrizes
• Exemplo da alocação dinâmica de uma matriz n x m:
Alocação Dinâmica em Linguagem C
Desalocando Matrizes
• Exemplo de desalocação da matriz n x m alocada
anteriormente:
Alocação Dinâmica em Linguagem C
Calloc
• Assim como malloc, calloc tem a função de alocar
espaços na memória. Sua princip...
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...
Alocação Dinâmica em Linguagem C
Realloc
• A função realloc permite alocar ou realocar um
espaço de memória.
• Pode ser ut...
Alocação Dinâmica em Linguagem C
Realloc
• Exemplo de uso da função realloc:
Alocação Dinâmica em Linguagem C
Realloc
• Alocando e desalocando com realloc:
Alocação Dinâmica em Linguagem C
Praticando
1. Escreva um programa que leia um número inteiro
positivo n, indicando a quan...
Alocação Dinâmica em Linguagem C
Códigos e exercícios
https://drive.google.com/folderview?
id=0BxsDe2LkW3V2cExTTTE3YWhmLTg...
Alocação Dinâmica em Linguagem C
Referências
CPLUSPLUS. C Standard General Utilities Library. Disponível
em: http://www.cp...
Alocação Dinâmica em Linguagem C
Obrigado!!!
Próximos SlideShares
Carregando em…5
×

Alocação Dinâmica em Linguagem C

610 visualizações

Publicada em

Alocação Dinâmica em Linguagem C

Publicada em: Software
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
610
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
24
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • - Abreviação de memory allocation
  • Porque eh operador e nao funcao?
    Sua aplicação juntamente com o uso da função malloc garante a portabilidade do código e facilita o processo de alocação.
  • Na segunda chamada o valor de vetor sera NULL
  • 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!!!

    ×