malloc() vs calloc():diferencias clave explicadas con ejemplos
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 memoria y liberarla durante la ejecución del programa. Estas rutinas se definen en el archivo de encabezado denominado stdlib.h.
¿Qué es malloc() ?
Es una función que se utiliza para asignar un bloque de memoria dinámicamente. Reserva espacio de memoria del tamaño especificado 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.
En este tutorial, aprenderá:
- ¿Qué es la asignación de memoria dinámica?
- ¿Qué es malloc() ?
- ¿Qué es calloc() ?
- ¿Por qué usar malloc() ?
- ¿Por qué usar calloc() ?
- Sintaxis de malloc()
- Sintaxis de calloc()
- Ejemplo de malloc() en C
- Ejemplo de calloc() en C
- Diferencia entre calloc() y malloc()
¿Qué es calloc() ?
La 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 puede asignar suficiente espacio como se especifica, devuelve un puntero nulo. La forma completa de la función calloc es asignación contigua.
¿Por qué usar malloc() ?
Estas son las razones para usar malloc()
- Debe usar malloc() cuando tenga que asignar memoria en tiempo de ejecución.
- Debe utilizar malloc cuando tenga que asignar objetos que deben existir más allá de la ejecución del bloque de memoria actual.
- Vaya a malloc() si necesita asignar una 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é usar calloc() ?
Estas son las razones para usar calloc()
- Cuando tiene que establecer la memoria asignada a cero.
- Puede usar 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()
- Use calloc() para solicitar una página que se sabe que ya está puesta a cero.
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 instrucció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 usa 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 actualmente se encuentra en el primer byte del espacio de memoria asignado.
Ejemplo de malloc() en C
En el siguiente código, sizeof(*ptr) se usa para asignar un bloque de memoria de 15 enteros. En la instrucción printf, estamos encontrando 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)); } }
Salida:
El valor del sexto entero es 480
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, no se asignará el espacio de memoria.
For loop se usa para iterar el valor de una variable "i" e imprimir la suma. Por último, función libre 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:
Construcción y cálculo de la secuencia suma de los primeros 10 términos n Sum =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 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 en cero. El número de argumentos 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 de inicio y no la convierte en cero. Antes de asignar la dirección, la función Calloc() devuelve la dirección de inicio y la convierte en cero. No realiza la inicialización de la memoria. Realiza la inicialización de la memoria.DIFERENCIAS CLAVE:
- La función malloc() devuelve solo la dirección de inicio y no la convierte en cero. Por otro lado, la función calloc() devuelve la dirección de inicio 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 de tiempo de malloc() es mayor que la de calloc() mientras que malloc() no es segura en comparación con calloc()
- malloc no inicializa la memoria mientras que calloc realiza la inicialización de la memoria.
Lenguaje C
- Expresiones, declaraciones y bloques de C# (con ejemplos)
- C++ do...while bucle con ejemplos
- Punteros de C++ con ejemplos
- Tipo de datos Char de C++ con ejemplos
- Sobrecarga de operadores de C++ con ejemplos
- Funciones de C++ con ejemplos de programas
- Tutorial de colecciones de C# con ejemplos
- Diferencia entre while y do-while:explicada con ejemplos
- Función calloc() en la biblioteca C con programa EJEMPLO
- Python String count () con EJEMPLOS
- Función Python round() con EJEMPLOS