Diferencia entre malloc() y calloc()
Diferencias clave entre malloc() y calloc()
- La función malloc() devuelve solo la dirección inicial y no la convierte en 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 1, mientras que en la función calloc, el número de argumentos es 2.
- La eficiencia del tiempo de malloc() es mayor que calloc(), mientras que malloc() no es seguro en comparación con calloc()
- malloc no inicializa la memoria, mientras que calloc realiza la inicialización de la memoria.

¿Qué es la asignación de memoria dinámica?
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 puede utilizar para asignar memoria y liberarla 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 un bloque de memoria de forma dinámica. Reserva espacio de memoria de un tamaño específico y devuelve el puntero nulo que apunta a la ubicación de la memoria.
El puntero devuelto suele ser de tipo void. Significa que podemos asignar la función malloc a cualquier puntero. La forma completa de malloc es asignación de memoria.
¿Qué es calloc()?
Función calloc() Se utiliza para asignar varios 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 asigna suficiente espacio como se especifica, devuelve un puntero nulo. La forma completa de la función calloc es asignación contigua.
Diferencia entre malloc() y calloc()
Aquí hay una diferencia importante entre malloc() y calloc():
malloc () | calloc () |
---|---|
La función Malloc() creará un único bloque de memoria del tamaño especificado por el usuario. | La función Calloc() puede asignar múltiples bloques de memoria para una variable. |
La función Malloc contiene valor basura. | El bloque de memoria asignado por una función calloc siempre se inicializa a cero. |
El número de argumento es 1. | El número de argumentos es 2. |
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 asignar la dirección, la función Calloc() devuelve la dirección inicial y la convierte en cero. |
No realiza la inicialización de la memoria. | Realiza la inicialización de la memoria. |
Sintaxis de malloc()
Aquí hay una sintaxis de malloc()
ptr = (cast_type *) malloc (byte_size);
En la sintaxis anterior, ptr es un puntero de cast_type. La función malloc devuelve un puntero a la memoria asignada de byte_size.
Example: ptr = (int *) malloc (50)
Cuando esta declaración se ejecuta con éxito, 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 calloc()
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, todos los bytes se inicializan a cero. Se devuelve el puntero que se encuentra actualmente en el primer byte del espacio de memoria asignado.
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 número 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)); } }
Salida:
El valor del sexto entero es 6.
Ejemplo de calloc() en C
El siguiente programa en lenguaje C calcula la suma de los primeros diez términos. Si el valor del puntero es nulo, entonces no se asignará espacio de memoria.
El bucle For se utiliza para iterar el valor de una variable "i" e imprimir la suma. Por último, la función free se utiliza 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; }
Salida:
Construyendo y calculando la suma secuencial de los primeros 10 términos n Suma = 45
¿Por qué utilizar malloc()?
Estas son las razones para usar malloc()
- Debes usar malloc() cuando tengas que asignar memoria en tiempo de ejecución.
- Debes usar malloc cuando tengas que asignar objetos que deben existir más allá de la ejecución del bloque de memoria actual.
- Elija malloc() si necesita asignar memoria mayor que el tamaño de esa pila.
- Devuelve el puntero al primer byte del espacio asignado.
- Permite a los desarrolladores asignar memoria según sea necesario en la cantidad exacta.
- Esta función asigna un tamaño de bloque de memoria de bytes del montón.
¿Por qué utilizar calloc()?
Estas son las razones para usar calloc()
- Cuando tiene que establecer la memoria asignada en cero.
- Puede utilizar calloc que devuelve un puntero para obtener acceso al montón de memoria.
- Se utiliza cuando necesita inicializar los elementos a cero para devolver un puntero a la memoria.
- Para evitar el desbordamiento que es posible con malloc()
- Utilice calloc() para solicitar una página que se sabe que ya está puesta a cero.