logo

Rozdiel medzi malloc() a calloc() s príkladmi

Funkcie malloc() a calloc() sú knižničné funkcie, ktoré dynamicky prideľujú pamäť. Dynamická znamená, že pamäť je alokovaná počas behu (spustenia programu) zo segmentu haldy.

Inicializácia

malloc() pridelí pamäťový blok danej veľkosti (v bajtoch) a vráti ukazovateľ na začiatok bloku. malloc() neinicializuje pridelenú pamäť. Ak sa pokúsite čítať z pridelenej pamäte bez toho, aby ste ju najprv inicializovali, potom vyvoláte nedefinované správanie , čo zvyčajne znamená, že hodnoty, ktoré čítate, budú hodnoty odpadkov.



príkaz sed

calloc() pridelí pamäť a tiež inicializuje každý bajt v pridelenej pamäti na 0. Ak sa pokúsite prečítať hodnotu pridelenej pamäte bez jej inicializácie, dostanete 0, pretože už bola inicializovaná na 0 pomocou calloc().

Parametre

malloc() má jediný argument, ktorým je počet bajtov na pridelenie.

Na rozdiel od malloc() má calloc() dva argumenty:



  1. Počet blokov, ktoré sa majú prideliť.
  2. Veľkosť každého bloku v bajtoch.

Návratová hodnota

Po úspešnej alokácii v malloc() a calloc() sa vráti ukazovateľ na blok pamäte, inak sa vráti NULL, čo znamená zlyhanie.

Príklad

Nižšie uvedený kód C demonštruje rozdiel medzi funkciami malloc a calloc na pridelenie dynamickej pamäte.

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

>

>

Výkon

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

Rozdiel medzi malloc() a calloc() v C

Pozrime sa na rozdiely v tabuľkovej forme:

Áno nie.

malloc()

calloc()

1.

malloc() je funkcia, ktorá vytvára jeden blok pamäte pevnej veľkosti. calloc() je funkcia, ktorá priraďuje zadaný počet blokov pamäte jednej premennej.

2.

ako získať emotikony iphone na android
malloc() má iba jeden argument calloc() má dva argumenty.

3.

malloc() je rýchlejší ako calloc. calloc() je pomalší ako malloc()

4.

malloc() má vysokú časovú efektivitu calloc() má nízku časovú efektivitu

5.

malloc() sa používa na označenie alokácie pamäte calloc() sa používa na označenie súvislej alokácie pamäte

6.

Syntax : void* malloc(veľkosť_t veľkosť); Syntax : void* calloc(size_t num, size_t size);

8.

malloc() neinicializuje pamäť na nulu calloc() inicializuje pamäť na nulu

9.

malloc() nepridáva žiadnu dodatočnú réžiu pamäte calloc() pridáva réžiu pamäte navyše

Súvisiace články