Latest web development tutorials

Gestión de memoria C

En este capítulo se explicará la gestión de memoria dinámica C. lenguaje C para la asignación y la gestión de la memoria proporciona varias funciones. Estas funciones se pueden encontrar en el archivode cabecera <stdlib.h>.

序号函数和描述
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

Asignación dinámica de memoria

Durante la programación, si se sabe de antemano el tamaño de la matriz, la definición de matriz más fácil. Por ejemplo, una matriz para almacenar nombres, con capacidad de hasta 100 caracteres, por lo que puede definir la matriz, de la siguiente manera:

char name[100];

Sin embargo, si usted no sabe de antemano la longitud del texto que se almacena, por ejemplo, una descripción detallada de un tema relacionado con su tienda. En este caso, es necesario definir un puntero que apunta a un tamaño de carácter indefinido aprendido de memoria, y luego el seguimiento de asignar memoria en la demanda, de la siguiente manera:

#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 );
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

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

El programa anterior también se puede utilizarcalloc () para escribir, sólo hay que reemplazar calloc malloc, como se muestra a continuación:

calloc(200, sizeof(char));

Cuando la asignación dinámica de memoria, usted tiene el control completo sobre el tamaño de cualquier valor puede ser pasado. Aquellos tamaño predefinido matriz, el tamaño no se puede cambiar una vez que se ha definido.

Vuelva a ajustar el tamaño de la memoria y la memoria libre

Cuando el programa termina, el sistema operativo libera automáticamente toda la memoria asignada al programa, sin embargo, recomendamos que no necesita memoria, debe llamar a la funciónfree () para liberar memoria.

Como alternativa, puede llamar a la funciónrealloc () para aumentar o disminuir el tamaño del bloque de memoria asignada.Vamos a usar la función realloc () y free (), volver a considerar el ejemplo anterior:

#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);
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

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

No se puede tratar de volver a asignar memoria adicional, strcat () genera un error debido a la insuficiente descripción almacenada memoria disponible.