logo

Diferencia entre malloc() y calloc() con ejemplos

Las funciones malloc() y calloc() son funciones de biblioteca que asignan memoria dinámicamente. Dinámico significa que la memoria se asigna durante el tiempo de ejecución (ejecución del programa) desde el segmento del montón.

Inicialización

malloc() Asigna un bloque de memoria de un tamaño determinado (en bytes) y devuelve un puntero al comienzo del bloque. malloc() no inicializa la memoria asignada. Si intenta leer desde la memoria asignada sin inicializarla primero, invocará un comportamiento indefinido, lo que generalmente significa que los valores que lea serán valores basura.



java fecha local hora

calloc() asigna la memoria y también inicializa cada byte en la memoria asignada a 0. Si intenta leer el valor de la memoria asignada sin inicializarla, obtendrá 0 porque ya ha sido inicializado a 0 por calloc().

Parámetros

malloc() toma un solo argumento, que es el Número de bytes a asignar.

A diferencia de malloc(), calloc() toma dos argumentos:



  1. Número de bloques a asignar.
  2. Tamaño de cada bloque en bytes.

Valor de retorno

Después de una asignación exitosa en malloc() y calloc(), se devuelve un puntero al bloque de memoria; de lo contrario, se devuelve NULL, lo que indica un error.

Ejemplo

El siguiente código C demuestra la diferencia entre las funciones malloc y calloc para asignar memoria dinámica.

C






// C code that demonstrates the difference> // between calloc and malloc> #include> #include> int> main()> {> >// Both of these allocate the same number of bytes,> >// which is the amount of bytes that is required to> >// store 5 int values.> >// The memory allocated by calloc will be> >// zero-initialized, but the memory allocated with> >// malloc will be uninitialized so reading it would be> >// undefined behavior.> >int>* allocated_with_malloc =>malloc>(5 *>sizeof>(>int>));> >int>* allocated_with_calloc =>calloc>(5,>sizeof>(>int>));> >// As you can see, all of the values are initialized to> >// zero.> >printf>(>'Values of allocated_with_calloc: '>);> >for> (>size_t> i = 0; i <5; ++i) {> >printf>(>'%d '>, allocated_with_calloc[i]);> >}> >putchar>(>' '>);> >// This malloc requests 1 terabyte of dynamic memory,> >// which is unavailable in this case, and so the> >// allocation fails and returns NULL.> >int>* failed_malloc =>malloc>(1000000000000);> >if> (failed_malloc == NULL) {> >printf>(>'The allocation failed, the value of '> >'failed_malloc is: %p'>,> >(>void>*)failed_malloc);> >}> >// Remember to always free dynamically allocated memory.> >free>(allocated_with_malloc);> >free>(allocated_with_calloc);> }>

>

>

Producción

Values of allocated_with_calloc: 0 0 0 0 0 The allocation failed, the value of failed_malloc is: (nil)>

Diferencia entre malloc() y calloc() en C

Veamos las diferencias en forma tabular:

S.No.

malloc()

calloc()

1.

malloc() es una función que crea un bloque de memoria de un tamaño fijo. calloc() es una función que asigna un número específico de bloques de memoria a una sola variable.

2.

malloc() solo toma un argumento calloc() toma dos argumentos.

3.

malloc() es más rápido que calloc. calloc() es más lento que malloc()

4.

malloc() tiene una alta eficiencia de tiempo calloc() tiene baja eficiencia de tiempo

5.

malloc() se utiliza para indicar la asignación de memoria calloc() se utiliza para indicar la asignación de memoria contigua

6.

declaración de cambio java
Sintaxis: void* malloc(size_t tamaño); Sintaxis: void* calloc(size_t num, size_t tamaño);

8.

malloc() no inicializa la memoria a cero calloc() inicializa la memoria a cero

9.

malloc() no agrega ninguna sobrecarga de memoria adicional calloc() agrega algo de sobrecarga de memoria adicional

Artículos relacionados