Alocação dinâmica

A alocação dinâmica é o processo que aloca memória em tempo de execução. Ela é utilizada quando não se sabe ao certo quanto de memória será necessário para o armazenamento das informações, podendo ser determinadas em tempo de execução conforme a necessidade do programa. Dessa forma evita-se o desperdício de memória.

[ Hits: 30.568 ]

Por: Daniel Gurgel Pinheiro em 02/11/2006


Alocação dinâmica de memória



Quando temos os arrays, devemos declará-los com uma dimensão máxima. Por exemplo, se quisessem fazer um programa para ordenar uma lista de n números, em que n seria um número a ser introduzido pelo utilizador, teriam de fazer qualquer coisa deste estilo:

#include <stdio.h>
#define N 10000
main()
{
   int a[N];  
   int n;  
   printf("Quantos números quer ordenar? ");
   scanf("%d", &n);
   if( n > N )
      printf("erro: a dimensão máxima do array é %d\n", N);
   else
      /* código para introduzir um array de n números e ordená-los */
   }
}

O programa acima tem a limitação de só funcionar quando n<=N. O truque que vos ensinei foi o de definir N como sendo um número muito grande e depois só usar parte do array. Esta solução tem a desvantagem de desperdiçar memória. Estamos a reservar um array de 10000 inteiros e muito provavelmente o número n introduzido pelo utilizador vai ser só 10 ou 20!

A alternativa a esta solução é requisitar a memória ao computador durante a própria execução do programa. A idéia é perguntar ao utilizador a dimensão do array. Se o utilizador introduzir 10, pedimos ao computador para nos dar um bloco de memória que permita guardar 10 inteiros. Deste modo, o array ocupa apenas o espaço que é estritamente necessário.

Na biblioteca stdlib.h existe uma função chamada malloc que permite requisitar ao computador n bytes de memória (malloc é uma abreviatura de memory alocation).

Página anterior     Próxima página

Páginas do artigo
   1. Visão mais detalhada da memória do computador
   2. E os arrays? Como é que são guardados?
   3. Alocação dinâmica de memória
   4. Veja programa como exemplo
Outros artigos deste autor

Acessando a porta paralela via Linux

Leitura recomendada

Utilizando técnicas recursivas em C e C++

Parâmetros interessantes do scanf e do printf em C

Programação de Jogos com SDL

Sinais em Linux

Tutorial OpenGL v3.0

  
Comentários
[1] Comentário enviado por tuxSoares em 02/11/2006 - 10:31h

Não entendi muita coisa mais tá de parabéns! Continue ajudando nossa comunidade, artigos como o seu são impressindiveis para o desenvolvimento intelectual de quem deseja aprender.

Vlw :)

[2] Comentário enviado por Reideer em 02/11/2006 - 10:47h

?
e como ficam lista e fila nesta historia?
acredito que tenha muitos metodos para alocação dinâmica.

[3] Comentário enviado por AboutDiego em 02/11/2006 - 23:34h

Vale ressaltar que dependendo do seu compilador pode também possuir o arquivo oculo malloc.h, tem o mesmo efeito que stdlib.h na hora da alocação dinâmica só muda em que na parte onde você coloca p=(int*)malloc, você colocará p=(int*)calloc

Obs: Somente para abrir um pouco mais o leque ^^. falouz

[4] Comentário enviado por balani em 03/11/2006 - 20:58h

Interessante, eu só não entendi ainda onde usar.

[5] Comentário enviado por AboutDiego em 04/11/2006 - 00:15h

Como utilizar o alocamento de memória ou como utilizar o documento??

[6] Comentário enviado por glaudiston em 30/07/2007 - 14:21h

Um exemplo prático seria quando vc quer ler um arquivo e não sabe o tamanho dele... pode ser gigantesco ou minúsculo.
Outros exemplos inclusive de controle de arrays multidimensionais seguem:
http://vergil.chemistry.gatech.edu/resources/programming/c-tutorial/dynamic.html
http://www.lysator.liu.se/c/c-faq/c-2.html

[7] Comentário enviado por juniomundo em 06/11/2010 - 16:53h

Ótimo. Muito obrigado. Está sendo de grande valia.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts