logo

Diferència entre malloc() i calloc() amb exemples

Les funcions malloc() i calloc() són funcions de biblioteca que assignen memòria dinàmicament. Dinàmica significa que la memòria s'assigna durant el temps d'execució (execució del programa) des del segment de pila.

Inicialització

malloc() assigna un bloc de memòria d'una mida determinada (en bytes) i retorna un punter al començament del bloc. malloc() no inicialitza la memòria assignada. Si intenteu llegir des de la memòria assignada sense inicialitzar-la primer, invocareu un comportament indefinit, que normalment significa que els valors que llegiu seran valors d'escombraries.



xarxa neuronal artificial

calloc() assigna la memòria i també inicialitza cada byte de la memòria assignada a 0. Si intenteu llegir el valor de la memòria assignada sense inicialitzar-la, obtindreu 0 ja que ja s'ha inicialitzat a 0 per calloc().

Paràmetres

malloc() pren un sol argument, que és el nombre de bytes per assignar.

A diferència de malloc(), calloc() pren dos arguments:



  1. Nombre de blocs a assignar.
  2. Mida de cada bloc en bytes.

Valor de retorn

Després d'una assignació correcta a malloc() i calloc(), es retorna un punter al bloc de memòria, en cas contrari es retorna NULL, que indica un error.

Exemple

El codi C següent mostra la diferència entre les funcions malloc i calloc per assignar memòria 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);> }>

>

>

Sortida

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

Diferència entre malloc() i calloc() a C

Vegem les diferències en forma tabular:

S.No.

malloc()

calloc()

1.

si per resum de rudyard kipling
malloc() és una funció que crea un bloc de memòria de mida fixa. calloc() és una funció que assigna un nombre especificat de blocs de memòria a una sola variable.

2.

malloc() només pren un argument calloc() pren dos arguments.

3.

malloc() és més ràpid que calloc. calloc() és més lent que malloc()

4.

malloc() té una alta eficiència temporal calloc() té poca eficiència temporal

5.

malloc() s'utilitza per indicar l'assignació de memòria calloc() s'utilitza per indicar l'assignació de memòria contigua

6.

Sintaxi: void* malloc (mida_t mida); Sintaxi: void* calloc(size_t num, size_t size);

8.

malloc() no inicialitza la memòria a zero calloc() inicialitza la memòria a zero

9.

malloc() no afegeix cap sobrecàrrega de memòria addicional calloc() afegeix una mica de sobrecàrrega de memòria addicional

Articles relacionats