logo

Forskjellen mellom malloc() og calloc() med eksempler

Funksjonene malloc() og calloc() er bibliotekfunksjoner som tildeler minne dynamisk. Dynamisk betyr at minnet tildeles under kjøretid (utførelse av programmet) fra heap-segmentet.

Initialisering

malloc() tildeler en minneblokk av gitt størrelse (i byte) og returnerer en peker til begynnelsen av blokken. malloc() initialiserer ikke det tildelte minnet. Hvis du prøver å lese fra det tildelte minnet uten først å initialisere det, vil du påkalle udefinert atferd , som vanligvis betyr at verdiene du leser vil være søppelverdier.



hva xd betyr

calloc() allokerer minnet og initialiserer også hver byte i det tildelte minnet til 0. Hvis du prøver å lese verdien av det tildelte minnet uten å initialisere det, får du 0 da det allerede er initialisert til 0 av calloc().

Parametere

malloc() tar et enkelt argument, som er antall byte å tildele.

I motsetning til malloc(), tar calloc() to argumenter:



  1. Antall blokker som skal tildeles.
  2. Størrelsen på hver blokk i byte.

Returverdi

Etter vellykket allokering i malloc() og calloc(), returneres en peker til minneblokken ellers returneres NULL som indikerer feil.

Eksempel

C-koden nedenfor viser forskjellen mellom malloc- og calloc-funksjoner for å tildele dynamisk minne.

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

>

>

Produksjon

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

Forskjellen mellom malloc() og calloc() i C

La oss se forskjellene i en tabellform:

Ja Nei.

replaceall i streng java

malloc()

calloc()

1.

malloc() er en funksjon som lager én minneblokk med fast størrelse. calloc() er en funksjon som tilordner et spesifisert antall minneblokker til en enkelt variabel.

2.

malloc() tar bare ett argument calloc() tar to argumenter.

3.

malloc() er raskere enn calloc. calloc() er tregere enn malloc()

4.

malloc() har høy tidseffektivitet calloc() har lav tidseffektivitet

5.

malloc() brukes til å indikere minneallokering calloc() brukes til å indikere sammenhengende minneallokering

6.

Syntaks: void* malloc(størrelse_t størrelse); Syntaks : void* calloc(størrelse_t antall, størrelse_t størrelse);

8.

malloc() initialiserer ikke minnet til null calloc() initialiserer minnet til null

9.

malloc() legger ikke til ekstra minneoverhead calloc() legger til litt ekstra minneoverhead

relaterte artikler