logo

Atšķirība starp malloc () un calloc () ar piemēriem

Funkcijas malloc () un calloc() ir bibliotēkas funkcijas, kas dinamiski piešķir atmiņu. Dinamisks nozīmē, ka atmiņa izpildlaikā (programmas izpildes) laikā tiek piešķirta no kaudzes segmenta.

Inicializācija

malloc () piešķir noteikta izmēra atmiņas bloku (baitos) un atgriež rādītāju uz bloka sākumu. malloc () neinicializē piešķirto atmiņu. Ja mēģināt nolasīt no piešķirtās atmiņas, vispirms to neinicializējot, tiks izsaukta nedefinēta uzvedība , kas parasti nozīmē, ka nolasītās vērtības būs atkritumu vērtības.



sql concat

calloc() piešķir atmiņu un arī inicializē katru piešķirtās atmiņas baitu uz 0. Ja mēģināt nolasīt piešķirtās atmiņas vērtību, to neinicializējot, jūs iegūsit 0, jo tas jau ir inicializēts uz 0, izmantojot calloc().

Parametri

malloc() izmanto vienu argumentu, kas ir piešķiramo baitu skaits.

Atšķirībā no malloc (), calloc () izmanto divus argumentus:



  1. Piešķiramo bloku skaits.
  2. Katra bloka lielums baitos.

Atdeves vērtība

Pēc veiksmīgas piešķiršanas malloc () un calloc () tiek atgriezts rādītājs uz atmiņas bloku, pretējā gadījumā tiek atgriezta NULL, kas norāda uz kļūmi.

Piemērs

Tālāk redzamais C kods parāda atšķirību starp malloc un calloc funkcijām dinamiskās atmiņas piešķiršanai.

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);> }>

>

>

Izvade

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

Atšķirība starp malloc () un calloc () valodā C

Apskatīsim atšķirības tabulas veidā:

Jā nē.

malloc ()

calloc()

1.

malloc() ir funkcija, kas izveido vienu fiksēta izmēra atmiņas bloku. calloc () ir funkcija, kas vienam mainīgajam piešķir noteiktu skaitu atmiņas bloku.

2.

malloc() izmanto tikai vienu argumentu calloc() izmanto divus argumentus.

3.

malloc() ir ātrāks par calloc. calloc() ir lēnāks nekā malloc()

4.

malloc() ir augsta laika efektivitāte calloc() ir zema laika efektivitāte

5.

malloc() tiek izmantots, lai norādītu atmiņas piešķiršanu calloc() tiek izmantots, lai norādītu blakus esošās atmiņas piešķiršanu

6.

Sintakse : void* malloc(size_t size); Sintakse : void* calloc(size_t num, size_t size);

8.

malloc () neinicializē atmiņu uz nulli calloc() inicializē atmiņu uz nulli

9.

malloc() nepievieno papildu atmiņu calloc() pievieno papildu atmiņu

Saistītie raksti