Erinevus malloc () ja calloc () vahel

Peamised erinevused malloc() ja calloc() vahel

  • Funktsioon malloc() tagastab ainult algusaadressi ja ei muuda seda nulliks, teisest küljest tagastab funktsioon calloc() lähteaadressi ja muudab selle nulliks.
  • Funktsioonis malloc on argumentide arv 1, samas kui funktsiooni calloc puhul on argumentide arv 2.
  • malloc() ajaefektiivsus on kõrgem kui calloc(), samas kui malloc() ei ole calloc()-ga võrreldes turvaline
  • malloc ei initsialiseeri mälu, samas kui calloc teostab mälu lähtestamist.
malloc() vs calloc()
malloc() vs calloc()

Mis on dünaamiline mälu eraldamine?

Dünaamiline mälu eraldamine on mälu eraldamise protsess käitusajal. On neli teegirutiini, calloc(), free(), realloc()ja malloc(), mida saab kasutada mälu eraldamiseks ja selle vabastamiseks programmi täitmise ajal. Need rutiinid on määratletud päisefailis nimega stdlib.h.

Mis on malloc()?

See on funktsioon, mida kasutatakse mäluploki dünaamiliseks eraldamiseks. See reserveerib määratud suurusega mäluruumi ja tagastab mälukohale osutava nullkursori.

Tagastatud kursor on tavaliselt tühine. See tähendab, et saame määrata mis tahes osutile malloc funktsiooni. Malloci täisvorm on mälu eraldamine.

Mis on calloc()?

Calloc() funktsioon kasutatakse mitme mäluploki eraldamiseks. See on dünaamiline mälu jaotamise funktsioon, mida kasutatakse mälu eraldamiseks keerukatele andmestruktuuridele, nagu massiivid ja struktuurid. Kui see funktsioon ei suuda määratud piisavalt ruumi eraldada, tagastab see nullkursori. Calloc funktsiooni täisvorm on külgnev jaotamine.

Erinevus malloc() ja calloc() vahel

Siin on oluline erinevus malloc () ja calloc () vahel:

malloc () calloc()
Funktsioon Malloc() loob ühe kasutaja määratud suurusega mäluploki. Funktsioon Calloc() võib määrata muutujale mitu mäluplokki.
Funktsioon Malloc sisaldab prügi väärtust. Calloc funktsiooniga eraldatud mäluplokk lähtestatakse alati nulliks.
Argumendi arv on 1. Argumentide arv on 2.
Calloc on aeglasem kui malloc. Malloc on kiirem kui calloc.
See pole callociga võrreldes turvaline. Võrreldes mallociga on selle kasutamine turvaline.
Aja efektiivsus on kõrgem kui calloc(). Aja efektiivsus on madalam kui malloc().
Funktsioon Malloc() tagastab ainult algusaadressi ega muuda seda nulliks. Enne aadressi määramist tagastab funktsioon Calloc() lähteaadressi ja muudab selle nulliks.
See ei teosta mälu lähtestamist. See teostab mälu lähtestamist.

malloc() süntaks

Siin on malloc() süntaks

ptr = (cast_type *) malloc (byte_size);

Ülaltoodud süntaksis on ptr cast_type kursor. Funktsioon malloc tagastab kursori eraldatud mälule byte_size.

Example: ptr = (int *) malloc (50)

Kui see lause on edukalt täidetud, reserveeritakse 50 baiti suurune mäluruum. Reserveeritud ruumi esimese baidi aadress määratakse int tüüpi osutile “ptr”.

Calloc() süntaks

Siin on malloc() süntaks

ptr = (cast_type *) calloc (n, size);

Ülaltoodud süntaksit kasutatakse n sama suurusega mäluploki eraldamiseks. Pärast mäluruumi eraldamist lähtestatakse kõik baidid nulliks. Tagatakse kursor, mis on hetkel eraldatud mäluruumi esimesel baidil.

Malloc() näide C-s

Allolevas koodis kasutatakse suurust sizeof(*ptr) 15 täisarvuga mäluploki eraldamiseks. Printf-lauses leiame 6. täisarvu väärtuse.

#include<stdlib.h>
#include<stdio.h>
int main(){
int *ptr;
ptr = malloc(15 * sizeof(*ptr)); 
    if (ptr != NULL) {
      *(ptr + 5) = 480; 
      printf("Value of the 6th integer is %d",*(ptr + 5));
    }
}

Väljund:

6. täisarvu väärtus on 480

Calloc() näide C-s

Allolev C-keele programm arvutab esimese kümne liikme summa. Kui kursori väärtus on null, siis mäluruumi ei eraldata.

For loopi kasutatakse muutuja “i” väärtuse itereerimiseks ja summa printimiseks. Lõpuks kasutatakse kursori vabastamiseks funktsiooni free.

#include <stdio.h>
#include <stdlib.h>
    int main() {
        int i, * ptr, sum = 0;
        ptr = calloc(10, sizeof(int));
        if (ptr == NULL) {
            printf("Error! memory not allocated.");
            exit(0);
        }
        printf("Building and calculating the sequence sum of the first 10 terms \n");
        for (i = 0; i < 10; ++i) { * (ptr + i) = i;
            sum += * (ptr + i);
        }
        printf("Sum = %d", sum);
        free(ptr);
        return 0;
    }

Väljund:

Esimese 10 liikme jadasumma koostamine ja arvutamine n Sum = 45

Miks kasutada malloc()?

Siin on malloc() kasutamise põhjused

  • Kui peate käitusajal mälu eraldama, peaksite kasutama malloc().
  • Peaksite kasutama malloci, kui peate eraldama objekte, mis peavad eksisteerima väljaspool praeguse mäluploki käitamist.
  • Valige malloc(), kui peate eraldama selle pinu suurusest suurema mälu.
  • See tagastab kursori eraldatud ruumi esimesele baidile.
  • See võimaldab arendajatel eraldada mälu täpselt vastavalt vajadusele.
  • See funktsioon eraldab mäluploki suuruse baitidest kuhjast.

Miks kasutada calloc()?

Siin on calloc() kasutamise põhjused

  • Kui peate eraldatud mälu määrama nulliks.
  • Mäluhunnikule juurdepääsu saamiseks võite kasutada calloci, mis tagastab kursori.
  • Kasutatakse siis, kui teil on vaja elemendid nullida, et kursor mällu tagastada.
  • Ülevoolu vältimiseks, mis on võimalik malloc()
  • Kasutage calloc() lehe taotlemiseks, mis on teadaolevalt juba nullitud.