nyckelskillnad – calloc vs malloc
Vid programmering är det nödvändigt att lagra data. Data lagras i minnet. Dessa minnesplatser är kända som variabler. Varje variabel har en specifik typ. De kan vara heltal, flyter, dubblar, tecken etc. Det finns också datastrukturer som kan lagra en sekventiell samling av element av samma typ av fast storlek. Det är en array. Programmeraren måste deklarera arraystorleken. Om programmeraren deklarerar en matris med heltal för fem element är det inte möjligt att tilldela ett värde till ett index som är högre än den deklarerade storleken. Minnesallokeringen är fast och kan inte ändras under körning. En annan minnesallokeringsmetod är dynamisk minnesallokering. Dynamisk minnesallokering hjälper till att allokera mer minne vid behov och släppa vid behov. Rubrikfilen har fyra funktioner för dynamisk minnesallokering. calloc och malloc är två sådana funktioner. Den viktigaste skillnaden mellan calloc och malloc är att calloc allokerar minnet och även initialiserar de allokerade minnesblocken till noll medan malloc allokerar minnet men inte initialiserar det tilldelade minnet till noll. Att komma åt innehållet i calloc ger noll, men malloc ger ett skräpvärde.
Vad är calloc?
Minnesallokering är processen att tilldela minne för de exekverande programmen. Ibland är det nödvändigt att ändra storleken på minnet. Därför används dynamisk minnesallokering. Det görs med hjälp av pekare. Pekare är referensvariabler som innehåller adressen till en annan variabel.
Figur 01: calloc och malloc
calloc står för "kontiguous allocation". Den allokerar flera minnesblock med samma storlek. Syntaxen för calloc är följande. Det krävs två argument. De är antalet block och storleken på varje block. Funktionen calloc returnerar en void-pekare, så en cast-operator används för att returnera pekartyp enligt den datatyp som krävs.
voidcalloc(size_t num, size_t size);
Se nedan enkla C-program.
include
include
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf(“Minne är inte allokerat”);
}
else{
printf(“Minne är tilldelat”);
}
return 0;
}
Enligt ovanstående program tilldelas ett sammanhängande minnesblock som kan innehålla 20 element. Var och en kommer att ha storleken på ett heltal. Sizeof(int) används eftersom heltalstypen varierar från kompilator till kompilator.
Om minnesallokeringen lyckas, returnerar den basadressen för minnesblocket. Det betyder att pekaren ptr nu pekar på basadressen för det minnesblocket. Alla allokerade regioner initieras till nollor. Det kommer att skriva ut meddelandet Memory Allocated. Om minnesallokeringen misslyckas kommer den att returnera nollpekaren. Därför kommer den att skriva ut Minnet är inte tilldelat meddelande.
Vad är malloc?
Mallloc-funktionen används för att allokera den nödvändiga mängden byte i minnet. Syntaxen för malloc är följande. Storleken representerar det nödvändiga minnet i byte.
void malloc(size_t_size);
Funktionen malloc returnerar en void-pekare, så en cast-operator används för att returnera pekartyp enligt den datatyp som krävs.
Se nedan enkla C-program med malloc-funktion.
include
include
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf(“Minne är inte allokerat”);
}
else{
printf(“Minne är tilldelat”);
}
return 0;
}
Enligt ovanstående program kommer minnesblock att tilldelas. Pekaren pekar på startadressen för det tilldelade minnet. Den returnerade pekaren konverteras till en heltalstyp. Om minne är tilldelat kommer det att skriva ut meddelande om minne är allokerat. Om minnet inte tilldelas kommer en nollpekare tillbaka. Därför är minnet inte tilldelat meddelande kommer att skrivas ut.
Vilka är likheterna mellan calloc och malloc?
- Båda dessa funktioner deklareras i rubrikfilen. Det är standardfilen för bibliotekshuvuden.
- Båda funktionerna används för dynamisk minnesallokering.
- Pekaren som returneras av calloc och malloc ska gjutas till den specifika typen.
- Vid framgångsrik minnesallokering returnerar båda funktionerna en pekare med minnesblockets basadress.
- Om minnestilldelningen misslyckas, kommer en nollpekare att returneras.
Vad är skillnaden mellan calloc och malloc?
calloc vs malloc |
|
calloc är en funktion för dynamisk minnesallokering i C-språk stdlib.h header-fil som allokerar ett specifikt antal byte och initierar dem till noll. | malloc är en funktion för dynamisk minnesallokering i C-språk stdlib.h header-fil som allokerar ett specifikt antal byte. |
Betydelse | |
calloc står för kontinuerlig allokering. | malloc står för minnesallokering. |
Syntax | |
calloc följer en syntax som liknar void calloc(size_t_num, size_t size); | malloc följer en syntax som liknar void malloc(size_t_size);. |
Antal argument | |
calloc tar två argument. De är ett antal block och storleken på varje block. | malloc tar ett argument. Det är ett antal byte. |
Speed | |
calloc tar lite längre tid än malloc. Det beror på det extra steget att initiera det tilldelade minnet med noll. | malloc är snabbare än calloc. |
Sammanfattning – calloc vs malloc
Vid statisk minnesallokering som med arrayer är minnet fixat. Om få element lagras är resten av minnet bortkastat. Det kan också orsaka fel när det tilldelade minnet är litet än det minne som krävs. Därför används dynamisk minnesallokering. I C-språket ger calloc och malloc dynamisk minnesallokering. Skillnaden mellan calloc och malloc är att calloc allokerar minne och även initialiserar de allokerade minnesblocken till noll medan malloc allokerar minnet men inte initialiserar minnesblocken till noll. Malloc tar två argument medan calloc tar två argument.
Ladda ner PDF-filen för calloc vs malloc
Du kan ladda ner PDF-versionen av den här artikeln och använda den för offlineändamål enligt citat. Ladda ner PDF-versionen här: Difference Between calloc och malloc