Liberando Memória ajustando o Tamanho das Strings em C

Recentemente apresentei o mesmo método em uma dica aqui mesmo no Viva o Linux. Criei esse artigo mais para os iniciantes para explicar em detalhes o funcionamento do código para liberar posições alocadas para a memória.

[ Hits: 1.006 ]

Por: Mauricio Ferrari em 24/05/2020 | Blog: http://linguagemcfacil.mozello.com/


Introdução



Criei um dica recentemente aqui mesmo no Viva o Linux sobre o tema que eu vou escrever: Melhor Controle de Memória de Strings em C [Dica]

Lá, eu fui direto e apresentei apenas as instruções. A dica que eu apresentei, só consegui encontrar em um curso que eu fiz na Udemy: Curso Completo de Linguagem C e C++ - Iniciante Ao Avançado | Udemy

Aqui, vou tentar detalhar ao máximo o método que eu apresentei. Esse método de liberar memória para o Computador pode fazer diferença no futuro de um programador, no caso de uma criação de um grande projeto no qual exige um grande consumo de memória.

ANALISANDO O CÓDIGO

Vamos analisar o código postado no Viva o Linux sem a string:
Na linha 5, é criado um espaço na memória com o nome de exemplo, ocupando 10 posições na memória. Como se sabe, a alocação da memória começa pela posição 0.

[ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ]

A linha 8, o comando fgets espera a tecla enter ser pressionada para gravar a palavra digitada no buffer para a string exemplo. Vamos considerar que a palavra "ideia" foi digitada:

[ i ] [ d ] [ e ] [ i ] [ a ] [   ] [   ] [   ] [   ] [ \0 ]

A string foi gravada e como de costume o caractere nulo "\0" usado para finalizar a string para que o printf não imprima caracteres doidos, pois como se sabe, ele irá percorrer a memória até encontrá-lo.

Conforme o exemplo anterior, é notável quatro espaços de memória sem utilidade nenhuma para a string. Esses poderiam ser liberados para uso em outros processos na memória.

APLICANDO O MÉTODO AO CÓDIGO

Vamos analisar o código postado no Viva o Linux com a string:
Na linha 10, foi acrescentado uma atribuição à string exemplo, que é justamente o método para liberar espaço para a memória.

Vamos entender a situação, não sabemos o tamanho da string e ser digitada. Só é possível saber com o uso do strlen, que conta os caracteres de uma string. São 5 caracteres mais o caractere nulo, portanto 6. Vamos usar isso para inserir um caractere nulo no local apropriado, reduzindo o tamanho da string.

exemplo[strlen(exemplo)] = '\0' ;

[ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [  6 ] [ 7 ] [ 8 ] [ 9 ]
[ i ] [ d ] [ e ] [ i ] [ a ] [   ] [ \0 ] [   ] [   ] [   ]

Vamos agora entender o que aconteceu, a aplicação do strlen conta 6 caracteres em exemplo e esse foi o valor passado para a string exemplo. É como se tivesse feito isso:

exemplo[6] = '\0' ;

Ele gravou a string na posição 6 na memória e não na sexta posição da memória que é a posição 5. Por isso foi necessário corrigir esse problema reduzindo em um a posição na memória:

exemplo[strlen(exemplo)-1] = '\0' ;

[ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [  5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ]
[ i ] [ d ] [ e ] [ i ] [ a ] [ \0 ] [   ] [   ] [   ] [   ]

CONCLUSÃO

Assim, a string é devidamente reduzida liberando assim, todo o espaço restante para a memória. Parece pouco mas, pense em uma string com 250 posições da memória alocada, aí sim o método é de grande utilidade. Isso proporcionaria uma grande economia no uso da memória em programas muito grandes.

Publicação original em meu site: Liberando Memória ajustando o Tamanho das Strings em C - Conteúdos - Linguagem C Fácil

Podem comentar lá também, ficarei feliz.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Instalando MultiLIB no Slackware 14.2 com Atualizações pelo GSlapt

Aplicativos do Windows que já tiveram suporte no Linux

Pendrive MultiBoot com o Ventoy Não Funcionou? Tem Solução!

Instalando o brModelo no Linux

LXDE Desktop no Slackware

Leitura recomendada

Introdução as Bibliotecas do C/C++

Criando uma calculadora com o Glade

Inteiros e Strings na linguagem C

Introdução à linguagem C - Parte III

Utilizando a função QSort em C

  
Comentários
[1] Comentário enviado por danniel-lara em 24/05/2020 - 14:46h


Muito bom , parabéns

[2] Comentário enviado por mauricio123 em 24/05/2020 - 17:27h


[1] Comentário enviado por danniel-lara em 24/05/2020 - 14:46h


Muito bom , parabéns


Obrigado!

[3] Comentário enviado por Cizordj em 26/05/2020 - 09:27h

Você como programador C, o que me diz da linguagem Vala?

[4] Comentário enviado por mauricio123 em 26/05/2020 - 22:29h


[3] Comentário enviado por Cizordj em 26/05/2020 - 09:27h

Você como programador C, o que me diz da linguagem Vala?


Não conhecia essa linguagem. Andei dando uma pesquisada e parece boa. Tem sintaxes bem parecida com C# inclusive. O que eu li de bom sobre ele é que ele possui uma vantagem em relação ao consumo de memória ram o que é muito bom. Porém, é mais destinado para o desenvolvimento de aplicações para o gnome. Não é de todo ruim, já que é possível instalar aplicações do gnome em outros ambientes gráficos.

Mas sem testar, não dá para dar uma nota. Olhando as documentações todas as linguagens parece ser boa. Por isso, só testando pra saber.

[5] Comentário enviado por Cizordj em 07/06/2020 - 00:11h


[4] Comentário enviado por mauricio123 em 26/05/2020 - 22:29h


[3] Comentário enviado por Cizordj em 26/05/2020 - 09:27h

Você como programador C, o que me diz da linguagem Vala?


Não conhecia essa linguagem. Andei dando uma pesquisada e parece boa. Tem sintaxes bem parecida com C# inclusive. O que eu li de bom sobre ele é que ele possui uma vantagem em relação ao consumo de memória ram o que é muito bom. Porém, é mais destinado para o desenvolvimento de aplicações para o gnome. Não é de todo ruim, já que é possível instalar aplicações do gnome em outros ambientes gráficos.

Mas sem testar, não dá para dar uma nota. Olhando as documentações todas as linguagens parece ser boa. Por isso, só testando pra saber.


Obrigado, é que eu tô tentando aprender alguma linguagem compilada orientada a objetos. Pelo visto o Vala vai ser interessante pra fazer o backend de algumas aplicações


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts