Na DMA, a decisão sobre memórias que são alocadas não podem tomar durante o tempo de compilação. Esta decisão ou memória é alocada durante o tempo de execução.
Sempre que criamos qualquer variável através do DMA, esse tipo de variável não tem nenhum nome; Acessamos essas variáveis através do endereço ou ponteiro.
Na SMA, o programador sabe desde o início que quantas variáveis ou quantas memórias são necessárias para o seu programa.
Mas no DMA, o programador não sabe do estado anterior que quantas variáveis ou memória são necessárias, depende do requisito do usuário.
Tipos de DMA:
Malloc ()
Função Malloc () é uma declaração de ação quando o compilador leu esta linha. O compilador não entende quantas memórias são alocadas, pois é uma declaração de ação. No bloco de memória de tempo de execução é criado.
Sempre que chamamos de Malloc (), passamos um número como um argumento, que pode entender o número de bytes do bloco de memória, deve ser criado pelo Malloc (). Em Malloc (), ele não pode declarar nenhum tipo de dados. Malloc () sempre retorna o endereço, cujo bloco de memória é criado.
O tipo de retorno malloc () é um ponteiro vazio, porque não sabe quais tipos de endereço ele retorna. Para isso, temos que digitar casta.
P = (flutuação*) malloc (4);Aqui digitamos casta, porque Malloc () é um ponteiro vazio.
Exemplo 1:
#incluirSaída:
Calloc ():
Com a ajuda do Calloc (), podemos criar mais de um bloco ou matriz no Calloc (passamos dois argumentos; 1º é quantos blocos queremos criar e o segundo é o tamanho do bloco). Calloc () também retorna o endereço em cada bloco por padrão 0 existe.
Exemplo 2:
#incluirSaída:
realloc ()
Sempre que criamos um bloco com a ajuda de Malloc () ou Calloc () e queremos alterar ou redimensionar o bloco, usamos realloc ().
Void *realloc (bloqueio void *, tamanho int)Em realloc (), temos que passar o endereço como um argumento de qual bloco queremos redimensionar.
realloc (PTR, 8);e o tamanho do bloco que queremos redimensionar. Esse tamanho que temos que passar um argumento no realloc ().
duplo *q;Somente os blocos criados por MALLOC () ou Calloc () podem ser redimensionados pelo RealLoc ().
Exemplo 3:
#incluirSaída:
livre ()
Com a ajuda de Free (), lançamos o bloco de memória criado por Malloc () ou Calloc () ou RealLoc ().
Variáveis estáticas só existem no escopo do bloco ou uma função. Se não podemos executar o livre (), sempre que a variável estática P é destruída, a variável que é criada dinamicamente, que não é destruída, mas permaneceu para sempre em RAM ou na memória. Isso é chamado de vazamento de memória. Para este grátis () é necessário para destruir o bloco de memória que é criado dinamicamente.
Livre () apenas destroe aqueles que são criados dinamicamente.
Conclusão:
DMA é um conceito poderoso na linguagem C porque remove a desvantagem da SMA. Na SMA, temos que tomar uma decisão antes de executar o programa de que quantos blocos de memória são criados. Como resultado, a memória é desperdiçada ou a memória não é suficiente. DMA Resolva o problema tomando decisão sobre o tempo de execução de quantos blocos são necessários para alocar a memória. Aloca memória para o requisito do programa.