Belangrijk verschil – calloc vs malloc
Bij het programmeren is het noodzakelijk om gegevens op te slaan. Gegevens worden opgeslagen in het geheugen. Deze geheugenlocaties worden variabelen genoemd. Elke variabele heeft een specifiek type. Dit kunnen gehele getallen, floats, doubles, karakters enz. zijn. Er zijn ook datastructuren die een sequentiële verzameling van elementen van hetzelfde type met een vaste grootte kunnen opslaan. Het is een array. De programmeur moet de arraygrootte declareren. Als de programmeur een array van gehele getallen voor vijf elementen declareert, is het niet mogelijk om een waarde toe te kennen aan een index die hoger is dan de opgegeven grootte. De geheugentoewijzing is vast en kan tijdens runtime niet worden gewijzigd. Een andere methode voor geheugentoewijzing is dynamische geheugentoewijzing. Dynamische geheugentoewijzing helpt om meer geheugen toe te wijzen wanneer dat nodig is en vrij te geven wanneer dat nodig is. Het headerbestand heeft vier functies voor dynamische geheugentoewijzing. calloc en malloc zijn twee van dergelijke functies. Het belangrijkste verschil tussen calloc en malloc is dat calloc het geheugen toewijst en ook de toegewezen geheugenblokken op nul initialiseert, terwijl malloc het geheugen toewijst maar dat toegewezen geheugen niet op nul initialiseert. Toegang tot de inhoud in calloc geeft nul, maar malloc geeft een waarde voor afval.
Wat is calloc?
Geheugentoewijzing is het proces van het toewijzen van geheugen voor de uitvoerende programma's. Soms is het nodig om de grootte van het geheugen te wijzigen. Daarom wordt dynamische geheugentoewijzing gebruikt. Het wordt gedaan met behulp van wijzers. 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 van dezelfde grootte toe. De syntaxis voor calloc is als volgt. Er zijn twee argumenten 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 terug te geven volgens het vereiste gegevenstype.
voidcalloc(size_t num, size_t size);
Raadpleeg het onderstaande eenvoudige C-programma.
inclusief
inclusief
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf(“Geheugen is niet toegewezen”);
}
anders{
printf(“Geheugen is toegewezen”);
}
retour 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 type integer varieert van compiler tot compiler.
Als de geheugentoewijzing is gelukt, wordt het basisadres van het geheugenblok geretourneerd. Het betekent dat pointer ptr nu naar het basisadres van dat geheugenblok wijst. Alle toegewezen regio's worden geïnitialiseerd op nullen. Het zal het bericht Geheugen toegewezen afdrukken. Als de geheugentoewijzing niet is gelukt, wordt de null-aanwijzer geretourneerd. Daarom wordt het bericht 'Geheugen is niet toegewezen' afgedrukt.
Wat is malloc?
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 terug te geven volgens het vereiste gegevenstype.
Verwijs naar het onderstaande eenvoudige C-programma met malloc-functie.
inclusief
inclusief
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf(“Geheugen is niet toegewezen”);
}
anders{
printf(“Geheugen is toegewezen”);
}
retour 0;
}
Volgens het bovenstaande programma wordt een geheugenblok toegewezen. De aanwijzer wijst naar het startadres van het toegewezen geheugen. De geretourneerde aanwijzer wordt geconverteerd naar een geheel getal. Als er geheugen is toegewezen, wordt een bericht afgedrukt dat het geheugen is toegewezen. Als het geheugen niet is toegewezen, keert een null-aanwijzer terug. Daarom wordt er geen geheugen toegewezen. Het bericht wordt afgedrukt.
Wat zijn de overeenkomsten tussen calloc en malloc?
- Beide functies worden gedeclareerd in het headerbestand. Het is het standaard headerbestand van de bibliotheek.
- Beide functies worden gebruikt voor dynamische geheugentoewijzing.
- De aanwijzer die wordt geretourneerd door calloc en malloc moet in het specifieke type worden gegoten.
- In succesvolle geheugentoewijzing, zullen beide functies een pointer teruggeven met het basisadres van het geheugenblok.
- Als de geheugentoewijzing niet succesvol is, wordt een null-pointer geretourneerd.
Wat is het verschil tussen calloc en malloc?
calloc vs malloc |
|
calloc is een functie voor dynamische geheugentoewijzing in C-taal stdlib.h header-bestand dat een specifiek aantal bytes toewijst en deze initialiseert naar nul. | malloc is een functie voor dynamische geheugentoewijzing in 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 vergelijkbaar met void calloc(size_t_num, size_t size); | malloc volgt een syntaxis vergelijkbaar met void malloc(size_t_size);. |
Aantal argumenten | |
calloc heeft twee argumenten. Het zijn een aantal blokken en de grootte van elk blok. | malloc neemt één argument aan. 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. |
Samenvatting – calloc vs malloc
Bij statische geheugentoewijzing, zoals bij het gebruik van arrays, is het geheugen vast. Als er maar weinig elementen worden opgeslagen, gaat de rest van het geheugen verloren. Het kan ook fouten veroorzaken wanneer het toegewezen geheugen kleiner 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 geen geheugenblokken op nul initialiseert. Malloc heeft twee argumenten, terwijl calloc twee argumenten heeft.
Download de PDF van calloc vs malloc
U kunt de PDF-versie van dit artikel downloaden en gebruiken voor offline doeleinden volgens de citatienota. Download hier de PDF-versie: Verschil tussen calloc en malloc