Tijdens het programmeren is het noodzakelijk om gegevens op te slaan. Gegevens worden opgeslagen in het geheugen. Deze geheugenlocaties staan bekend als variabelen. Elke variabele heeft een specifiek type. Dit kunnen gehele getallen, drijvers, doubles, karakters, etc. zijn. Er zijn ook datastructuren die een sequentiële verzameling van vaste elementen van hetzelfde type kunnen opslaan. Het is een array. De programmeur moet de array-grootte declareren. Als de programmeur een array van gehele getallen voor vijf elementen declareert, is het niet mogelijk om een waarde toe te wijzen aan een index die hoger is dan de opgegeven grootte. De geheugentoewijzing is vast en kan niet tijdens runtime worden gewijzigd. Andere geheugentoewijzingsmethode is dynamische geheugentoewijzing. Dynamische geheugentoewijzing helpt om meer geheugen toe te wijzen wanneer dat nodig is en geeft indien nodig vrij. Het header-bestand heeft vier functies voor dynamische geheugentoewijzing. calloc en malloc zijn twee van dergelijke functies. De belangrijk verschil tussen calloc en malloc is dat calloc wijst het geheugen toe en initialiseert ook de toegewezen geheugenblokken naar nul, terwijl malloc het geheugen toewijst, maar initialiseert dat toegewezen geheugen niet tot nul. Toegang tot de inhoud in calloc geeft nul, maar malloc geeft een afvalwaarde.
1. Overzicht en belangrijkste verschil
2. Wat is calloc
3. Wat is malloc
4. Overeenkomsten tussen calloc en malloc
5. Vergelijking zij aan zij - calloc vs malloc in tabelvorm
6. Samenvatting
Geheugentoewijzing is het toewijzen van geheugen aan de uitvoerende programma's. Soms is het nodig om de grootte van het geheugen te wijzigen. Daarom wordt dynamische geheugentoewijzing gebruikt. Het is gedaan met behulp van verwijzingen. Pointers zijn referentievariabelen die het adres van een andere variabele bevatten.
Figuur 01: calloc en malloc
calloc staat voor "aaneengesloten toewijzing". Het wijst meerdere geheugenblokken met dezelfde grootte toe. De syntaxis voor calloc is als volgt. Er zijn twee argumenten voor nodig. Ze zijn het aantal blokken en de grootte van elk blok. De functie calloc retourneert een lege aanwijzer, dus een cast-operator wordt gebruikt om het aanwijzertype te retourneren volgens het vereiste gegevenstype.
void * calloc (size_t num, size_t size);
Raadpleeg het onderstaande eenvoudige C-programma.
#include
#include
int main ()
int ptr * = (int *) calloc (20, sizeof (int));
if (ptr == NULL)
printf ("Geheugen is niet toegewezen");
anders
printf ("Geheugen is toegewezen");
retourneer 0;
Volgens het bovenstaande programma wordt een aaneengesloten geheugenblok toegewezen dat 20 elementen kan bevatten. Elk heeft de grootte van een geheel getal. De sizeof (int) wordt gebruikt omdat het integer-type varieert van compiler tot compiler.
Als de geheugentoewijzing succesvol is, retourneert deze het basisadres van het geheugenblok. Het betekent dat wijzer ptr nu naar het basisadres van dat geheugenblok wijst. Alle toegewezen regio's worden geïnitialiseerd naar nullen. Het bericht Gealloceerd geheugen wordt afgedrukt. Als de geheugentoewijzing niet succesvol is, wordt de lege aanwijzer geretourneerd. Daarom wordt het geheugen afgedrukt is niet toegewezen bericht.
De malloc-functie wordt gebruikt om het vereiste aantal bytes in het geheugen toe te wijzen. De syntaxis voor malloc is als volgt. De grootte vertegenwoordigt het vereiste geheugen in bytes.
void * malloc (size_t_size);
De functie malloc retourneert een lege aanwijzer, dus een cast-operator wordt gebruikt om het aanwijzertype te retourneren volgens het vereiste gegevenstype.
Raadpleeg het onderstaande eenvoudige C-programma met de malloc-functie.
#include
#include
int main ()
int ptr * = (int *) malloc (10 * sizeof (int));
if (ptr == NULL)
printf ("Geheugen is niet toegewezen");
anders
printf ("Geheugen is toegewezen");
retourneer 0;
Volgens het bovenstaande programma zal geheugenblok worden toegewezen. De aanwijzer wijst naar het startadres van het toegewezen geheugen. De geretourneerde aanwijzer wordt geconverteerd naar een integer-type. Als geheugen is toegewezen, wordt het geheugen voor toegewezen geheugen toegewezen. Als het geheugen niet is toegewezen, keert een lege aanwijzer terug. Daarom wordt het geheugen niet toegewezen, bericht wordt afgedrukt.
calloc vs malloc | |
calloc is een functie voor dynamische geheugentoewijzing in een C-taal stdlib.h headerbestand dat een specifiek aantal bytes toewijst en initialiseert naar nul. | malloc is een functie voor dynamische geheugentoewijzing in een C-taal stdlib.h headerbestand dat een specifiek aantal bytes toewijst. |
Betekenis | |
calloc staat voor aaneengesloten toewijzing. | malloc staat voor geheugentoewijzing. |
Syntaxis | |
calloc volgt een syntaxis die lijkt op void * calloc (size_t_num, size_t size); | malloc volgt een syntaxis die lijkt op void * malloc (size_t_size);. |
Aantal argumenten | |
calloc neemt twee argumenten. Ze zijn een aantal blokken en de grootte van elk blok. | malloc neemt een argument. Het is een aantal bytes. |
Snelheid | |
calloc duurt iets langer dan malloc. Dat komt door de extra stap van het initialiseren van het toegewezen geheugen met nul. | malloc is sneller dan calloc. |
Bij statische geheugentoewijzing zoals wij die arrays gebruiken, is het geheugen gefixeerd. Als er weinig elementen zijn opgeslagen, wordt de rest van het geheugen verspild. Het kan ook fouten veroorzaken wanneer het toegewezen geheugen klein is dan het vereiste geheugen. Daarom wordt dynamische geheugentoewijzing gebruikt. In C-taal bieden calloc en malloc dynamische geheugentoewijzing. Het verschil tussen calloc en malloc is dat calloc geheugen toewijst en ook de toegewezen geheugenblokken op nul initialiseert, terwijl malloc het geheugen toewijst, maar geheugenblokken niet op nul initialiseert. Malloc neemt twee argumenten, terwijl calloc twee argumenten aanroept.
U kunt de PDF-versie van dit artikel downloaden en gebruiken voor offline doeleinden volgens citaatnotitie. Download de PDF-versie hier: Verschil tussen calloc en malloc
1.Kumar, Krishan. "Verschil tussen Malloc en Calloc in C." Cs-Fundamentals.com, Cs-Fundamentals.com. Beschikbaar Hier
2. "C dynamische geheugentoewijzing." Wikipedia, Wikimedia Foundation, 13 januari 2018. Beschikbaar Hier
3. "Calloc () versus malloc ()." GeeksforGeeks, 14 juni 2017. Beschikbaar Hier