Antes de aprender la diferencia entre malloc y calloc, aprendamos:
¿Qué es la asignación de memoria dinámica?
La asignación de memoria dinámica es un proceso de asignación de memoria en tiempo de ejecución. Hay cuatro rutinas de biblioteca, calloc (), free (), realloc () y malloc () que se pueden usar para asignar y liberar memoria durante la ejecución del programa. Estas rutinas se definen en el archivo de encabezado llamado stdlib.h.
¿Qué es malloc ()?
Es una función que se utiliza para asignar dinámicamente un bloque de memoria. Reserva un espacio de memoria de un tamaño especificado y devuelve el puntero nulo que apunta a la ubicación de la memoria.
El puntero devuelto suele ser de tipo nulo. Significa que podemos asignar una función malloc a cualquier puntero. Toda la forma de malloc es la asignación de memoria.
En este tutorial, aprenderá:
¿Qué es calloc ()?
La función Calloc () se usa para asignar múltiples bloques de memoria. Es una función de asignación de memoria dinámica que se utiliza para asignar la memoria a estructuras de datos complejas, como matrices y estructuras. Si esta función no puede asignar suficiente espacio como se especifica, anulará los retornos. La forma completa de una función calloc es una asignación táctil.
¿Por qué usar malloc ()?
Aquí están las razones para usar malloc ()
- Debe usar malloc () cuando necesite asignar memoria en tiempo de ejecución.
- Debe usar malloc cuando necesite asignar cosas que deben existir en lugar de ejecutar el bloque de memoria actual.
- Elija malloc () si necesita asignar más memoria que el tamaño de ese acero.
- Devuelve el puntero al primer byte del espacio asignado.
- Permite a los desarrolladores asignar memoria según sea necesario en el tamaño exacto.
- Esta función asigna un tamaño de bloque de memoria de bytes del montón.
¿Por qué usar calloc ()?
Aquí están las razones para usar calloc ()
- Cuando tienes que poner a cero la memoria asignada.
- Puede usar calloc que trae un puntero para acceder a la pila de memoria.
- Se utilizan cuando necesita iniciar los elementos a cero para devolver un puntero a la memoria.
- Para evitar el desbordamiento, puede malloc ()
- Utilice calloc () para solicitar una página que ya se sabe que es cero.
Proporción de malloc ()
Aquí hay una sintaxis de malloc ()
ptr = (cast_type *) malloc (byte_size);
En la sintaxis anterior, ptr es un puntero cast_type. La función malloc devuelve un puntero a la memoria asignada de byte_size.
Example: ptr = (int *) malloc (50)
Tras la ejecución satisfactoria de esta declaración, se reserva un espacio de memoria de 50 bytes. La dirección del primer byte del espacio reservado se asigna al puntero «ptr» de tipo int.
Sintaxis de llamada ()
Aquí hay una sintaxis de malloc ()
ptr = (cast_type *) calloc (n, size);
La sintaxis anterior se utiliza para asignar n bloques de memoria del mismo tamaño. Una vez asignado el espacio de memoria, todas las medidas comienzan a cero. Se lanza el puntero, que se encuentra en el primer byte del espacio de memoria asignado actualmente.
Ejemplo de malloc () en C.
En el siguiente código, sizeof (* ptr) se utiliza para asignar un bloque de memoria de 15 enteros. En la declaración printf, encontramos el valor del sexto entero.
#include<stdlib.h> #include<stdio.h> int main(){ int *ptr; ptr = malloc(15 * sizeof(*ptr)); if (ptr != NULL) { *(ptr + 5) = 480; printf("Value of the 6th integer is %d",*(ptr + 5)); } }
Producción:
El valor del sexto entero es 480
Muestra de calloc () i C.
El programa de lenguaje C a continuación calcula la suma de los primeros diez términos. Si el valor del puntero es nulo, no se asignará el espacio de memoria.
Se utiliza un bucle para repetir el valor de una variable «i» e imprimir la suma. Finalmente, se usa sin función para liberar el puntero.
#include <stdio.h> #include <stdlib.h> int main() { int i, * ptr, sum = 0; ptr = calloc(10, sizeof(int)); if (ptr == NULL) { printf("Error! memory not allocated."); exit(0); } printf("Building and calculating the sequence sum of the first 10 terms n"); for (i = 0; i < 10; ++i) { * (ptr + i) = i; sum += * (ptr + i); } printf("Sum = %d", sum); free(ptr); return 0; }
Producción:
Tome y calcule la suma de la secuencia de los primeros 10 términos n Suma = 45
Diferencia entre calloc () y malloc ()
Aquí hay una diferencia importante entre malloc () y calloc ():
malloc () | calloc () |
La función Malloc () creará un solo bloque de memoria de un tamaño especificado por el usuario. | La función Calloc () puede asignar múltiples bloques de memoria a una variable. |
Malloc tiene un valor basura en su lugar. | El bloque de memoria asignado por una función de llamada siempre se inicia a cero. |
El número de argumentos es 2. | El número de argumentos es 1. |
Calloc es más lento que malloc. | Malloc es más rápido que calloc. |
No es seguro en comparación con calloc. | Es seguro de usar en comparación con malloc. |
La eficiencia del tiempo es mayor que calloc (). | La eficiencia del tiempo es menor que malloc (). |
La función Malloc () devuelve solo la dirección inicial y no la convierte en cero. | Antes de que se asigne la dirección, la función Calloc () devuelve la dirección inicial y la convierte en cero. |
No funciona con la memoria inicial. | Realiza un arranque de memoria. |
EFECTOS PRINCIPALES:
- la función malloc () devuelve solo la dirección inicial y deja cero, por otro lado, la función calloc () devuelve la dirección inicial y la convierte en cero.
- En la función malloc, el número de argumentos es 2 y la función argumento es 1.
- malloc () tiene una mayor eficiencia de tiempo que calloc () pero malloc () no es seguro en comparación con calloc ()
- malloc no inicializa la memoria, pero el arranque calloc sí lo hace.