Diferencia entre malloc y reasloc en la programación C

Diferencia entre malloc y reasloc en la programación C
El malloc () y el reasloc (); Ambas funciones se utilizan para la asignación de memoria dinámica y en este artículo, discutiremos la comparación de ambos; REALLOC () y MALLOC () Funciones en detalle. Pero antes de comprender estas funciones, discutamos la diferencia entre la memoria estática y dinámica en la programación C.

En la programación C, cuando ejecutamos un programa, ocupa algo de memoria en el sistema. Si usamos la memoria estática, tenemos que asignar un bloque de memoria fijo del sistema, luego, después de la ejecución del programa, pueden ocurrir dos escenarios; El programa necesitará un tamaño de bloque más grande que el tamaño declarado o necesitará el bloque de memoria de tamaño más pequeño. Si el bloque de memoria se vuelve menos para el programa ejecutado, los resultados no serán precisos y si el tamaño del bloque es mayor para el programa ejecutado, entonces la memoria libre restante del bloque no es útil.

Para evitar esto, se prefiere usar la memoria dinámica en la programación C que tiene diferentes tipos de funciones.

¿Qué es una función malloc () en la programación C?

En la programación C, si usamos la memoria estática, no podemos cambiar el tamaño de la memoria durante la ejecución del programa. Es una práctica recomendada usar memoria dinámica en la programación C para que el tamaño de la memoria se pueda alterar durante la ejecución del programa.

Para el uso de la memoria dinámica, tenemos que incluir un archivo de encabezado "Stdlib.H ", que incluye todas las funciones de la memoria dinámica. El malloc () también es miembro de stdlib.H Biblioteca y se utiliza para asignar memoria al programa ejecutado. Cuando se llama a una función malloc () en un programa, envía una solicitud al montón del sistema, que asigna el bloque de memoria solicitado a la función malloc () o devolverá un valor nulo si no hay espacio suficiente en el montón.

El MALLOC () solicita el bloque de memoria de acuerdo con la necesidad del programa ejecutado y cuando el programa se ejecuta correctamente, podemos devolver el bloque de memoria al montón utilizando la función Free (), por lo que puede usarse para la ejecución de otras instrucciones.

La sintaxis general de la función malloc () es:

ptr_name = (Cast-type*) malloc (tamaño);

La explicación de la sintaxis anterior es simple:

  • Podemos usar cualquier nombre para el puntero (el puntero se usa para almacenar direcciones)
  • Luego tenemos que declarar el tipo de datos o el tipo de reparto para el puntero como Int y Char
  • Y finalmente usando la función malloc () y dentro de la función, debemos mencionar el tamaño de la memoria necesaria

Para una mejor comprensión, consideraremos un ejemplo, crearemos un archivo con el nombre de mal_txt.C y escriba el siguiente script:

#incluir
#incluir
int main ()
int a = 4, i, *ptr, s = 0;
ptr = (int *) malloc (a * sizeOf (int));
if (ptr == null)
printf ("\ nerror! memoria no asignada.");
salida (0);

printf ("\ nenter Elements of Array:");
para (i = 0; i< a; ++i)
scanf ("%d", ptr + i);
s + = *(ptr + i);

printf ("\ nsum: %d", s);
printf ("\ n");
regresar 0;

Para compilar el mal_txt.Cile C, usamos el compilador GCC:

$ GCC MAL_TXT.c -o mal_txt

Una vez que el archivo se compila correctamente sin ningún error, ejecute el código usando el comando:

ps ./mal_txt

En el código anterior, estamos creando la matriz e imprimiendo la suma de los elementos de la matriz. Una explicación detallada del programa anterior es:

  • Hemos incluido las dos bibliotecas; stdlib.H para el uso de funciones de memoria dinámica y stdio.h para las funciones de entrada y salida
  • Declaramos cuatro variables A, S, I y *P donde " *" se usa con "P" porque es un puntero y almacenan la ubicación en lugar de variables
  • Empleamos la función malloc () y utilizamos el tamaño de una variable "A", lo que significa que solicitará la memoria del montón de acuerdo con el tamaño de "A" y el puntero "P" irá al inicio de la memoria asignado
  • Luego usamos la "Declaración if", si el montón no ha tenido suficiente memoria, devolverá el valor nulo, en este caso, simplemente muestre el "error! memoria no asignada."Usando la función printf ()
  • Si se asigna memoria, con la ayuda de la ayuda de scanf () tomará cuatro elementos del usuario, calculará su suma y guardará en "S"
  • Finalmente, mostrará el valor de "s", que es la suma de todos los elementos de la matriz

¿Qué es una función RealLoc () en la programación C?

Otra función de la memoria dinámica es la función RealLoc (), se usa para modificar el bloque de memoria asignado a la función MALLOC (). La función MALLOC () como se discutió anteriormente solicita un bloque de memoria desde el montón, pero para modificar el tamaño del bloque de memoria, por lo que utilizamos la función RealLoc () en lugar de eliminar todo el bloque de memoria y redecar el nuevo bloque de memoria manualmente.

La función RealLoc () es la forma breve de "Reaslocación de la memoria" y se utiliza para cambiar el tamaño del tamaño del bloque de memoria asignado por la función Heap a MALLOC () o Calloc (). No perturba el contenido original del bloque de memoria y solicita el nuevo bloque de memoria desde el montón y copia todos los datos del bloque de memoria anterior al nuevo bloque de memoria sin perturbar ningún contenido de él.

La sintaxis general del uso de la función RealLoc () es:

$ PTR = REALLOC (PTR, Newsize);

La explicación de la sintaxis anterior es:

  • Use la variable de puntero que se usa con la función malloc ()
  • Use la función reasloc () con los parámetros; Nombre del puntero y nuevo tamaño que desea asignarlo

Nuevamente crearemos un archivo, Real_file.C, y escriba el código en él para una mejor comprensión del uso de la función RealLoc ():

#incluir
#incluir
int main ()
int *ptr;
PTR = Malloc (200);
if (ptr == null)
printf ("La memoria no está asignada.");
salida (0);

PTR = REALLOC (PTR, 400);
if (ptr!= Nulo)
printf ("La memoria ha asignado correctamente \ n");
regresar 0;

Ahora compile el real_file.c usando el compilador GCC:

$ GCC real_file.c -o real_file

Si el archivo se compila correctamente, ejecute el programa usando el comando:

ps ./Real_File

La explicación del script anterior es:

  • Incluimos dos archivos de encabezado; stdlib.h para las funciones de memoria dinámica y stdio.h para las funciones de entrada y salida
  • Variable de puntero declarada *PTR
  • Usó la función malloc () y solicitó el montón para asignar 200 bytes, si la memoria no es asignada por el montón, “la memoria no está asignada."Se mostrará utilizando la función printf ()
  • Si se asigna la memoria, entonces llegará a la función RealLoc () y cambiará el tamaño de la memoria de 100 bytes a 400 bytes
  • Si el montón le asignó memoria de 500 bytes; Mostrará el ("La memoria ha creado correctamente")

Conclusión

En la programación C, la asignación de memoria dinámica es la asignación manual de la memoria de acuerdo con el requisito del programa. Las funciones MALLOC () y REALLOC () son parte de la memoria dinámica; MALLOC () se usa para la asignación de memoria y REALLOC () se usa para la reasignación de la memoria. En este artículo, hemos explicado ambos; MALLOC () y las funciones de reasloc (), cómo funcionan y cuál es la sintaxis general de usar ambos. Finalmente, para una mejor comprensión, ejecutamos los ejemplos de ambas funciones.