C - Gestión de memoria
Este capítulo explica la gestión dinámica de la memoria en C. El lenguaje de programación C proporciona varias funciones para la asignación y gestión de la memoria. Estas funciones se pueden encontrar en
Sr.No. | Función y descripción |
---|---|
1 | void *calloc(int num, int size); Esta función asigna una matriz de num elementos cuyo tamaño en bytes será tamaño . |
2 | void free(void *dirección); Esta función libera un bloque de memoria especificado por dirección. |
3 | void *malloc(tamaño_t tamaño); Esta función asigna una matriz de num bytes y déjelos sin inicializar. |
4 | void *realloc(void *dirección, int newsize); Esta función reasigna memoria extendiéndola hasta nuevo tamaño . |
Asignación dinámica de memoria
Mientras programa, si conoce el tamaño de una matriz, entonces es fácil y puede definirla como una matriz. Por ejemplo, para almacenar un nombre de cualquier persona, puede tener un máximo de 100 caracteres, por lo que puede definir algo de la siguiente manera −
char name[100];
Pero ahora consideremos una situación en la que no tiene idea de la longitud del texto que necesita almacenar, por ejemplo, desea almacenar una descripción detallada sobre un tema. Aquí necesitamos definir un puntero al carácter sin definir cuánta memoria se requiere y luego, según los requisitos, podemos asignar memoria como se muestra en el siguiente ejemplo:
Demostración en 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 ); }
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado.
Name = Zara Ali Description: Zara ali a DPS student in class 10th
El mismo programa se puede escribir usando calloc(); lo único es que necesita reemplazar malloc con calloc de la siguiente manera −
calloc(200, sizeof(char));
Por lo tanto, tiene el control completo y puede pasar cualquier valor de tamaño mientras asigna memoria, a diferencia de las matrices en las que una vez definido el tamaño, no puede cambiarlo.
Redimensionar y liberar memoria
Cuando sale su programa, el sistema operativo libera automáticamente toda la memoria asignada por su programa, pero como una buena práctica cuando ya no necesita memoria, debe liberar esa memoria llamando a la función free() .
Alternativamente, puede aumentar o disminuir el tamaño de un bloque de memoria asignado llamando a la función realloc() . Revisemos el programa anterior una vez más y hagamos uso de las funciones realloc() y free() −
Demostración en 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); }
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado.
Name = Zara Ali Description: Zara ali a DPS student.She is in class 10th
Puede probar el ejemplo anterior sin reasignar memoria adicional, y la función strcat() generará un error debido a la falta de memoria disponible en la descripción.
Lenguaje C
- Memoria no mecánica moderna
- Memoria de solo lectura (ROM)
- Microprocesadores
- Gestión de memoria C++:nuevo y eliminar
- C Asignación de memoria dinámica
- Java - Documentación Comentarios
- Memoria dinámica C++
- Java 10 - Asignación de montones
- Manual de Gestión de Mantenimiento
- Eventos de gestión de activos 2012
- 4 objetivos para la gestión de activos