Malloc () vs calloc (): diferencias clave explicadas con ejemplos

Tabla de contenido:

Anonim

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 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 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 la 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 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, devuelve un puntero nulo. La forma completa de la función calloc es la asignación contigua.

¿Por qué usar malloc ()?

Aquí están las razones para usar malloc ()

  • Debe usar malloc () cuando tenga que asignar memoria en tiempo de ejecución.
  • Debe usar malloc cuando tenga 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 la memoria necesaria en la cantidad exacta.
  • 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 devuelve un puntero para obtener acceso al montón de memoria.
  • Se usa 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 se ha puesto 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 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 que se asigna 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 usa para asignar un bloque de memoria de 15 enteros. En la declaración printf, estamos encontrando el valor del sexto entero.

#include#includeint 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

Ejemplo de calloc () en 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.

El bucle for se utiliza para iterar el valor de una variable "i" e imprimir la suma. Por último, la función libre se utiliza para liberar el puntero.

#include #include 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:

Construyendo y calculando 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 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 argumentos es 2. El número de argumento 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 de inicio 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 inicializaciones de 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 2, mientras que en la función calloc, el número de argumentos es 1.
  • malloc () la eficiencia de tiempo 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.