Latest web development tutorials

C Memory Management

Ten rozdział wyjaśni C dynamiczne zarządzanie pamięcią. Język C dla przydziału i zarządzania pamięcią udostępnia kilka funkcji. Funkcje te można znaleźć w<stdlib.h> plik nagłówka.

序号函数和描述
1void *calloc(int num, int size);
该函数分配一个带有num个元素的数组,每个元素的大小为size字节。
2void free(void *address);
该函数释放 address 所指向的h内存块。
3void *malloc(int num);
该函数分配一个num字节的数组,并把它们进行初始化。
4void *realloc(void *address, int newsize);
该函数重新分配内存,把内存扩展到newsize

Dynamiczna alokacja pamięci

Podczas programowania, jeżeli z góry wiadomo, wielkość tablicy, tablica definicji łatwiejsze. Na przykład, tablica do przechowywania nazw, które mogą pomieścić do 100 znaków, więc można zdefiniować tablicę, co następuje:

char name[100];

Jednakże, jeśli nie wiesz, z góry długość tekstu, który ma zostać zapisany, takich jak szczegółowy opis tematu związanego z Twojego sklepu. Tutaj musimy zdefiniować wskaźnik wskazujący na charakter nieokreślonej wielkości pamięci uczonego, a następnie obserwacji alokacji pamięci na żądanie, co następuje:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   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 );
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Name = Zara Ali
Description: Zara ali a DPS student in class 10th

Powyższy program może także używaćcalloc () pisać, wystarczy zastąpić malloc calloc, jak pokazano poniżej:

calloc(200, sizeof(char));

Gdy dynamiczna alokacja pamięci, masz pełną kontrolę nad wielkością dowolnej wartości mogą być przekazywane. Tych predefiniowaną wielkość tablicy, rozmiar nie może być zmieniana raz została ona zdefiniowana.

Ponownie wyregulować wielkość pamięci i wolnej pamięci

Gdy program kończy działanie, system operacyjny automatycznie zwalnia całą pamięć przydzieloną do programu, jednak zalecamy, aby nie potrzebują pamięci, należy wywołać funkcjęfree () w celu zwolnienia pamięci.

Alternatywnie, można wywołaćrealloc function (),aby zwiększyć lub zmniejszyć rozmiar przydzielonego bloku pamięci. Użyjmy realloc () i free () function, ponownie przyjrzeć się powyższym przykładzie:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   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.");
   }
   /* 假设您想要存储更大的描述信息 */
   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 );

   /* 使用 free() 函数释放内存 */
   free(description);
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th

Nie możesz próbować ponownie przydzielić dodatkową pamięć strcat () Funkcja generuje błąd z powodu niewystarczającej przechowywane opis dostępnej pamięci.