Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

C - Gerenciamento de Memória


Este capítulo explica o gerenciamento dinâmico de memória em C. A linguagem de programação C fornece várias funções para alocação e gerenciamento de memória. Essas funções podem ser encontradas no arquivo de cabeçalho.
Nº Sr. Função e descrição
1
void *calloc(int num, tamanho int);

Esta função aloca um array de num elementos cada um dos quais tamanho em bytes será size .
2
void free(void *endereço);

Esta função libera um bloco de memória especificado por endereço.
3
void *malloc(size_t size);

Esta função aloca um array de num bytes e deixá-los não inicializados.
4
void *realloc(void *address, int newsize);

Esta função realoca memória estendendo-a até newsize .

Alocando memória dinamicamente


Durante a programação, se você estiver ciente do tamanho de um array, é fácil e você pode defini-lo como um array. Por exemplo, para armazenar um nome de qualquer pessoa, ele pode ir até um máximo de 100 caracteres, então você pode definir algo da seguinte forma −
char name[100];

Mas agora vamos considerar uma situação em que você não tem ideia do tamanho do texto que precisa armazenar, por exemplo, você deseja armazenar uma descrição detalhada sobre um tópico. Aqui, precisamos definir um ponteiro para o caractere sem definir quanta memória é necessária e, posteriormente, com base no requisito, podemos alocar memória conforme mostrado no exemplo abaixo -
Demonstração ao vivo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* allocate memory dynamically */
   description = malloc( 200 * sizeof(char) );
	
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcpy( description, "Zara ali a DPS student in class 10th");
   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado.
Name = Zara Ali
Description: Zara ali a DPS student in class 10th

O mesmo programa pode ser escrito usando calloc(); a única coisa é que você precisa substituir malloc por calloc da seguinte maneira -
calloc(200, sizeof(char));

Assim, você tem controle total e pode passar qualquer valor de tamanho enquanto aloca memória, ao contrário dos arrays, onde uma vez definido o tamanho, você não pode alterá-lo.

Redimensionando e liberando memória


Quando seu programa sai, o sistema operacional libera automaticamente toda a memória alocada pelo seu programa, mas como uma boa prática quando você não precisa mais de memória, você deve liberar essa memória chamando a função free() .

Alternativamente, você pode aumentar ou diminuir o tamanho de um bloco de memória alocado chamando a função realloc() . Vamos verificar o programa acima mais uma vez e fazer uso das funções realloc() e free() −
Demonstração ao vivo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* allocate memory dynamically */
   description = malloc( 30 * sizeof(char) );
	
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcpy( description, "Zara ali a DPS student.");
   }
	
   /* suppose you want to store bigger description */
   description = realloc( description, 100 * sizeof(char) );
	
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcat( description, "She is in class 10th");
   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );

   /* release memory using free() function */
   free(description);
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado.
Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th

Você pode tentar o exemplo acima sem realocar memória extra, e a função strcat() dará um erro devido à falta de memória disponível na descrição.

Linguagem C

  1. Memória somente leitura (ROM)
  2. Microprocessadores
  3. Gerenciamento de memória C++:novo e excluir
  4. C Alocação de Memória Dinâmica
  5. Java - Comentários da Documentação
  6. Memória Dinâmica C++
  7. Java 10 - Alocação de heap
  8. Manual de Gerenciamento de Manutenção
  9. Eventos de gerenciamento de ativos 2012
  10. 4 metas para gerenciamento de ativos