logo

Verschil tussen malloc() en calloc() met voorbeelden

De functies malloc() En calloc() zijn bibliotheekfuncties die geheugen dynamisch toewijzen. Dynamisch betekent dat het geheugen tijdens runtime (uitvoering van het programma) vanuit het heap-segment wordt toegewezen.

Initialisatie

malloc() wijst een geheugenblok van een bepaalde grootte (in bytes) toe en retourneert een verwijzing naar het begin van het blok. malloc() initialiseert het toegewezen geheugen niet. Als u probeert uit het toegewezen geheugen te lezen zonder het eerst te initialiseren, roept u undefined behavior op, wat meestal betekent dat de waarden die u leest onzinwaarden zijn.



converteer tekenreeks naar jsonobject Java

calloc() wijst het geheugen toe en initialiseert ook elke byte in het toegewezen geheugen op 0. Als u de waarde van het toegewezen geheugen probeert te lezen zonder deze te initialiseren, krijgt u 0 omdat deze al door calloc() op 0 is geïnitialiseerd.

Parameters

malloc() heeft één enkel argument nodig, namelijk de aantal bytes dat moet worden toegewezen.

In tegenstelling tot malloc() heeft calloc() twee argumenten nodig:



  1. Aantal toe te wijzen blokken.
  2. Grootte van elk blok in bytes.

Winstwaarde

Na succesvolle toewijzing in malloc() en calloc(), wordt een verwijzing naar het geheugenblok geretourneerd, anders wordt NULL geretourneerd, wat een fout aangeeft.

Voorbeeld

De onderstaande C-code demonstreert het verschil tussen malloc- en calloc-functies om dynamisch geheugen toe te wijzen.

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

>

>

Uitvoer

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

Verschil tussen malloc() en calloc() in C

Laten we de verschillen in tabelvorm bekijken:

Ja nee.

malloc()

calloc()

1.

malloc() is een functie die één geheugenblok met een vaste grootte creëert. calloc() is een functie die een gespecificeerd aantal geheugenblokken aan een enkele variabele toewijst.

2.

malloc() heeft slechts één argument nodig calloc() heeft twee argumenten nodig.

3.

malloc() is sneller dan calloc. calloc() is langzamer dan malloc()

4.

malloc() heeft een hoge tijdsefficiëntie calloc() heeft een lage tijdsefficiëntie

5.

netwerk en soorten netwerken
malloc() wordt gebruikt om geheugentoewijzing aan te geven calloc() wordt gebruikt om aaneengesloten geheugentoewijzing aan te geven

6.

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

8.

malloc() initialiseert het geheugen niet naar nul calloc() initialiseert het geheugen naar nul

9.

malloc() voegt geen extra geheugenoverhead toe calloc() voegt wat extra geheugenoverhead toe

gerelateerde artikelen