Na alocação dinâmica, um espaço de memória de um determinado tamanho é reservado em tempo de execução para uso exclusivo pelo processo que o aloca.
A linguagem C tem várias funções complementares para gerenciamento dinâmico de memória. Os mais comumente implementados são os malloc (), realloc () e livre () que fazem parte da biblioteca padrão e são definidos no “stdlib.H ”cabeçalho. Essas três funções alocam a memória para um processo, mudam seu tamanho e liberam novamente.
Na programação, é muito importante gerenciar estritamente a memória dinâmica, porque toda vez que alocamos os recursos para um programa, os afastamos do sistema operacional. A má gestão da memória dinâmica pode ter consequências catastróficas para os processos que são executados no sistema naquele momento.
Neste artigo do Linux, você aprenderá como usar a função gratuita (), que é uma das três funções básicas que o idioma C fornece para o gerenciamento dinâmico de memória que libera os recursos alocados e os devolve ao sistema operacional para reutilização.
Mostraremos a sintaxe e a descrição de como ela funciona, o argumento de entrada e o tipo de dados que compensa. Em seguida, implementaremos o uso da função gratuita () em exemplos práticos com trechos de código e imagens que demonstram seu uso e seus efeitos no sistema.
Sintaxe da função FREE () na linguagem C
vazio livre (vazio *ptr);
Descrição da função gratuita () na linguagem C
A função free () libera uma quantidade especificada de memória alocada dinamicamente.
A memória dinâmica é alocada chamando a função malloc () e especificando o tamanho em bytes da área que você deseja alocar em seu argumento de entrada. Como resultado, essa função retorna o ponteiro "PTR" que aponta para a área recém -alocada.
A função free () libera o espaço de memória reservado que é referenciado por "ptr" em seu único argumento de entrada e retorna sua disponibilidade ao sistema operacional. Esta função não retorna resultados e não tem definição de erro no “Errno.h " cabeçalho.
A função gratuita () faz parte da biblioteca padrão e é definida no “Stdlib.h " cabeçalho. Para usá -lo e as outras funções dinâmicas de gerenciamento de memória, você deve incluir este cabeçalho no seu código da seguinte maneira:
#incluir
Como libertar a memória alocada dinamicamente usando a função gratuita ()
Neste exemplo, criamos um aplicativo de console muito simples que nos dá controle sobre a alocação da memória com a função MALLOC () e liberando a memória com a função gratuita (). Em seguida, compilamos o código e executamos o aplicativo, monitoramos o sistema e observamos os efeitos.
Para criar o aplicativo de console, primeiro incluímos os cabeçalhos necessários e abrimos uma função principal () com um retorno vazio. Declaramos o ponteiro "PTR" que é usado nas funções Malloc () e Free () para os Ponteiros para as áreas de memória alocadas. Também declaramos o tamanho inteiro que determina o tamanho da memória alocada e a opção inteira, que é a condição para o comutador que usamos para selecionar a opção de menu.
Depois que as variáveis necessárias são declaradas, o aplicativo exibe seu PID usando as funções Printf () e GetPid (). Em seguida, o programa entra em um loop infinito, onde exibe um menu com duas opções. O item selecionado pelo usuário é recuperado usando a função scanf () na opção Inteiro e é a condição para um comutador com dois casos, um para cada opção.
A opção 1 chama a função malloc () que aloca um bloco de memória de 122 MB para o processo. Enquanto a opção 2 libera que bloqueia chamando a função gratuita (). Você pode ver o código completo deste aplicativo na seguinte ilustração:
#incluir
#incluir
#incluir
#incluir
void main ()
op opção;
char *ptr;
INT tamanho = 64000000;
printf ("\ nProcess ID: %i \ n", getpid ());
enquanto (1)
printf ("\ n [1] aloce memória.\ n [2] Libere a memória.\ n ");
scanf ("%i", & option);
switch (opção)
caso 1:
printf ("\ nAllocating Memory… \ n");
Ptr = malloc (tamanho*sizeof (char));
quebrar;
Caso 2:
printf ("\ nReleasing Memory… \ n");
grátis (PTR);
quebrar;
// interruptor final
// terminar enquanto (1)
Observe que, no caso 1, a função malloc () aloca uma área de memória de tamanho e retorna o ponteiro "PTR". No caso 2, a função gratuita () usa o mesmo ponteiro que o argumento de entrada para libertar a memória alocada.
Para ver os efeitos dessas duas funções no sistema, precisamos abrir dois consoles de comando. No Terminal 1, executamos o comando principal para ver os recursos usados por cada processo do sistema. No terminal 2, compilamos e executamos o aplicativo que acabamos de ver.
Depois que o aplicativo está em execução, examinamos o console 1 para os recursos usados pelo processo cujo PID é exibido no console 2.
Como podemos ver na figura, o sistema atribuiu o número 13009 ao processo. Podemos ver na coluna 10 do terminal esquerdo que nosso aplicativo consome menos de 0.1% da memória do sistema.
Se selecionarmos a opção 1 do nosso aplicativo e pressionarmos "Enter", a função malloc () aloca 122 MB de memória para o processo.
Como podemos ver nesta imagem, a memória usada por nosso aplicativo agora é 3.6% da memória total que está disponível no sistema.
Agora, selecionamos a opção 2 do nosso aplicativo que chama a função gratuita (), passando o ponteiro "PTR" como um argumento de entrada. Esta ação libera a memória que é alocada pela função malloc () na opção 1.
Nesta imagem, podemos ver como a função gratuita () libertou a memória alocada de 3.6% a 0.1% do sistema total que é usado por nossa aplicação.
Conclusão
Neste artigo da dica do Linux, mostramos como usar a função gratuita () para libertar a memória alocada dinamicamente. Observamos a sintaxe desta função e a descrição teórica de como ela funciona.
Em seguida, aplicamos o que aprendemos em um exemplo prático com trechos de código e imagens em que criamos um aplicativo de console que controla a chamada das funções Malloc () e Free (). Nós o executamos passo a passo e monitoramos o sistema para ver os efeitos de chamar as funções para alocar e libertar a memória do sistema.