den grundläggande skillnaden mellan malloc och calloc-funktionen är att calloc () behöver två argument istället för ett argument som krävs av malloc (). Både malloc () och calloc () är de funktioner som C programmeringsspråk ger för dynamisk minnesallokering och de-allokering vid körning.
innan vi förstår malloc() och calloc() funktioner låt oss först förstå betydelsen av dynamisk minnesallokering. Minnesallokering är proceduren för att tilldela datorminnet för utförande av program och processer. Vi använder dynamiska allokeringstekniker när det inte är känt tidigare hur mycket minnesutrymme som behövs för programmet och processen.
dynamisk minnesallokering uppstår på grund av problemen i samband med statisk minnesallokering, till exempel om färre element lagras, slösas resten av minnet onödigt bort. Därför övervinner det problemen med statisk minnesallokering där minnet tilldelas endast när det är nödvändigt.
innehåll: malloc() Vs calloc()
- jämförelsetabell
- Definition
- Nyckelskillnader
- slutsats
jämförelsetabell
Jämförelsebasis | malloc() | calloc() |
---|---|---|
antal block | tilldelar enstaka block av krävt minne. | tilldelar flera block av det begärda minnet. |
Syntax | tomrum *malloc(storlek_t storlek); | tomrum * calloc (storlek_t num, storlek_t storlek); |
initialisering | malloc() rensar inte och initierar det tilldelade minnet. | det tilldelade minnet initieras till noll med hjälp av calloc (). |
sätt för tilldelning | malloc() funktionen allokerar minne av storlek ’storlek’ från högen. | calloc () funktionen allokerar minne vars storlek är lika med num * storlek. |
hastighet | snabb | jämförelsevis långsam. |
definition av malloc ()
malloc-funktionen tilldelar ett minnesblock i byte. Användaren bör uttryckligen ge blockstorleken, det kräver för användningen.
genom malloc funktionsprogram begär RAM av systemet för tilldelning av minnet, om begäran medges (dvs., malloc funktionen säger framgångsrik i allokering minne), returnerar den en pekare till det första blocket av minnet. Den returnerar ogiltig typ av pekare, det betyder att alla typer av pekare kan tilldelas.
även om det returnerar en NULL, om malloc-funktionerna inte kan allokera den önskade mängden minne. Malloc-funktionen är tillgänglig i TURBO C, header file alloc.h
eller stdlib.h
, och på UNIX kommer den att finnas tillgänglig i header file <malloc.h>
.syntaxen för denna funktion är som följer:
malloc(number of elements * size of each element);
till exempelint *ptr;
ptr=malloc(10*sizeof (int))
där storleken representerar storlek på minne som krävs i byte (dvs., antalet angränsande minnesplatser som ska tilldelas).
men som tidigare nämnts att funktionen malloc returnerar en ogiltig pekare, följaktligen krävs en cast-operatör för att ändra den returnerade pekartypen baserat på vårt behov, ovanstående deklaration kan presenteras i följande formulär:
ptr_var=(type_cast* ) malloc (size)
där ptr_var
är namnet på pekaren som behåller startadressen för tilldelat minnesblock, type_cast
är den datatyp som den returnerade pekaren (eller typen void) ska omvandlas till, och storleken beskriver storleken på den tilldelade minnesblocket, type_cast
minnesblock i byte.
till exempel:int *ptr;
ptr=(int*) malloc (10 * size of (int));
minne tilldelat av malloc-funktionen innehåller skräpvärde.
Observera att för att verifiera att om motsvarande begäran genereras av malloc för att allokera minnet som beviljas av system RAM eller avvisas (om det inte finns utrymme om det behövs). Vi kan använda egenskapen där den nödvändiga mängden minne inte tilldelas malloc-funktionen returnerar en NULL.
Definition av calloc ()
calloc funktionen fungerar exakt samma som malloc funktion exklusive det faktum att det kräver två argument som i fallet med malloc () endast ett argument behövs.
till exempel:int*ptr;
ptr = (int*)calloc(10,2);
här anger 2 storleken på datatypen i en byte för vilken vi vill att allokeringen ska göras, vilket är detta fall är 2 för heltal. Och 10 anger antalet element för vilka tilldelning ska göras.
Kom ihåg att argumentet som skickades till funktionen malloc var (n*10), Det är ett enda argument var inte förvirrad eftersom flera argument alltid separeras med kommatecken. Argumentet (n * 10) har inga kommatecken däremellan. Därför är det ett enda argument, men inte ett enkelt men ett uttryck.
återgå till ovanstående deklaration, efter utförandet av ovanstående uttalande tilldelas ett minnesblock på 20 byte till det begärande programmet och adressen till det första blocket tilldelas det begärande programmet och adressen till det första blocket tilldelas pekaren ptr.
minne som tilldelas av calloc-funktionen håller alla nollor. Calloc-funktionen kan också erhållas i rubrikfilen <stdlib.h>
eller <alloc.h>
I TURBO C.
Nyckelskillnader mellan malloc och calloc
de primära skillnaderna mellan malloc och calloc funktioner är:
- ett enda block av krävt minne tilldelas i malloc medan flera block av begärt minne tilldelas av calloc.malloc-funktionen rensar inte och initierar det tilldelade minnet. Den innehåller skräp värde och objekt av det tilldelade minnet kan inte ändras. Däremot initierar calloc det tilldelade minnet till noll.
- malloc är snabbare än calloc på grund av kravet på ytterligare initialiseringssteg i calloc men skillnaden är försumbar.
- en annan skillnad mellan dessa två är att calloc är en malloc + memset, memset allokerar de fysiska sidorna i minnet medan malloc bara tilldelar minnet från högen i den virtuella adressen.
slutsats
både malloc-och calloc-funktioner används för tilldelning av minnet och har en viss fördel, och nackdel som malloc är snabb jämfört med calloc. Dessutom malloc lättare att använda eftersom det tar bara ett argument eftersom calloc allokerar minne och initiera minnesområdet med noll. Men du föredrar att använda calloc när variabel initialisering är viktigare för dig.