Diferença entre Malloc e RealLoc na programação C

Diferença entre Malloc e RealLoc na programação C
O malloc () e o realloc (); Ambas as funções são usadas para a alocação de memória dinâmica e, nesta redação, discutiremos a comparação de ambos; RealLoc () e MaiC () funções em detalhes. Mas antes de entender essas funções, vamos discutir a diferença entre memória estática e dinâmica na programação C.

Na programação C, quando executamos um programa, ele ocupa alguma memória no sistema. Se usarmos a memória estática, precisamos atribuir um bloco de memória fixo do sistema e, após a execução do programa, dois cenários poderão acontecer; O programa precisará de um tamanho de bloco maior do que o tamanho declarado ou precisará do bloco de tamanho menor de memória. Se o bloco de memória se tornar menor para o programa executado, os resultados não serão precisos e se o tamanho do bloco for maior para o programa executado, a memória livre restante do bloco não for útil.

Para evitar isso, é preferido usar memória dinâmica na programação C, que possui diferentes tipos de funções.

O que é uma função malloc () na programação C

Na programação C, se usarmos a memória estática, não podemos alterar o tamanho da memória durante a execução do programa. É uma prática recomendada usar memória dinâmica na programação C, para que o tamanho da memória possa ser alterado durante a execução do programa.

Para o uso da memória dinâmica, precisamos incluir um arquivo de cabeçalho “Stdlib.h ", que inclui todas as funções da memória dinâmica. O malloc () também é membro do stdlib.biblioteca H e é usado para atribuir memória ao programa executado. Quando uma função malloc () é chamada em um programa, ela envia uma solicitação para a pilha do sistema, que atribui o bloco de memória solicitado à função malloc () ou retornará um valor nulo se não houver espaço suficiente no pilha.

O Malloc () solicita o bloco de memória de acordo com a necessidade do programa executado e, quando o programa é executado com sucesso, podemos devolver o bloco de memória à pilha usando a função gratuita () para que possa ser usada para a execução de outras instruções.

A sintaxe geral da função malloc () é:

ptr_name = (tipo de elenco*) Malloc (tamanho);

A explicação para a sintaxe acima é simples:

  • Podemos usar qualquer nome para o ponteiro (o ponteiro é usado para armazenar endereços)
  • Então temos que declarar o tipo de dados ou tipo de elenco para o ponteiro como int e char
  • E, finalmente

Para uma melhor compreensão, consideraremos um exemplo, criaremos um arquivo com o nome de mal_txt.c e digite o seguinte script:

#incluir
#incluir
int main ()
int a = 4, i, *ptr, s = 0;
ptr = (int *) malloc (a * sizeof (int));
if (ptr == null)
printf ("\ Nerror! memória não alocada.");
saída (0);

printf ("\ Nenter Elements of Array:");
para (i = 0; i< a; ++i)
scanf ("%d", ptr + i);
s + = *(ptr + i);

printf ("\ nsum: %d", s);
printf ("\ n");
retornar 0;

Para compilar o mal_txt.Arquivo C, usamos o compilador GCC:

$ gcc mal_txt.c -o mal_txt

Depois que o arquivo for compilado com sucesso sem nenhum erro, execute o código usando o comando:

$ ./mal_txt

No código acima, estamos criando a matriz e imprimindo a soma dos elementos da matriz. Uma explicação detalhada do programa acima é:

  • Incluímos as duas bibliotecas; stdlib.h para o uso de funções de memória dinâmica e stdio.h para as funções de entrada e saída
  • Declaramos quatro variáveis ​​a, s, i e *p onde " *" é usado com "p" porque é um ponteiro e armazenar o local em vez de variáveis
  • Empregamos a função malloc () e usamos o tamanho de uma variável "A", o que significa que ele solicitará a memória da pilha de acordo com o tamanho de "A" e o ponteiro "P" irá para o início da memória alocado
  • Então usamos a "declaração se", se o heap não tiver uma memória suficiente, ele retornará o valor nulo, neste caso simplesmente exibirá o "erro! memória não alocada.”Usando a função printf ()
  • Se a memória for atribuída, com a ajuda da função scanf (), levará quatro elementos do usuário, calcule sua soma e salve -a em "S"
  • Finalmente, exibirá o valor de "S", que é a soma de todos os elementos da matriz

O que é uma função realLoc () na programação C

Outra função da memória dinâmica é a função realloc (), é usada para modificar o bloco de memória atribuído à função MALLOC (). A função malloc (), conforme discutido acima, solicita um bloco de memória da pilha, mas para modificar o tamanho do bloco de memória para que usamos a função realLoc () em vez de excluir todo o bloco de memória e redeclar o novo bloco de memória manualmente manualmente.

A função realloc () é a forma curta de "realocação da memória" e é usada para redimensionar o tamanho do bloco de memória atribuído pela função heap para malloc () ou calloc (). Ele não perturba o conteúdo original do bloco de memória e solicita o novo bloco de memória da pilha e copia todos os dados do bloco de memória antigo para o novo bloco de memória sem perturbar nenhum conteúdo dele.

A sintaxe geral de usar a função realLoc () é:

$ ptr = realloc (PTR, Newsize);

A explicação da sintaxe acima é:

  • Use a variável ponteiro que é usada com a função MALLOC ()
  • Use a função realLoc () com os parâmetros; Nome do ponteiro e novo tamanho que você deseja atribuir

Novamente vamos criar um arquivo, real_file.c, e escreva o código nele para obter uma melhor compreensão do uso da função realloc ():

#incluir
#incluir
int main ()
int *ptr;
ptr = Malloc (200);
if (ptr == null)
printf ("A memória não é alocada.");
saída (0);

ptr = realloc (ptr, 400);
if (ptr!= Nulo)
printf ("A memória alocou \ n");
retornar 0;

Agora compile o real_file.c usando o compilador GCC:

$ gcc real_file.C -o real_file

Se o arquivo for compilado com sucesso, execute o programa usando o comando:

$ ./real_file

A explicação do script acima é:

  • Incluímos dois arquivos de cabeçalho; stdlib.h para as funções de memória dinâmica e stdio.h para as funções de entrada e saída
  • Variável de ponteiro declarado *ptr
  • Usou a função malloc () e solicitou a pilha para atribuir 200 bytes, se a memória não for atribuída pela pilha: “A memória não for alocada.”Será exibido usando a função printf ()
  • Se a memória for atribuída, ela chegará à função realloc () e redimensione a memória de 100 bytes para 400 bytes
  • Se o heap atribuiu a memória de 500 bytes; Ele exibirá o ("Memory criou com sucesso")

Conclusão

Na programação C, a alocação de memória dinâmica é a alocação manual da memória de acordo com o requisito do programa. As funções malloc () e realloc () fazem parte da memória dinâmica; Malloc () é usado para a alocação de memória e realloc () é usado para a realocação da memória. Neste artigo, explicamos os dois; funções malloc () e realloc (), como elas funcionam e qual é a sintaxe geral de usar os dois. Finalmente, para uma melhor compreensão, executamos os exemplos de ambas as funções.