Soovitatav, 2025

Toimetaja Valik

Erinevus malloc ja calloci vahel

Põhiline erinevus malloc ja calloc funktsiooni vahel on see, et calloc () vajab kahte argumenti ühe argumenti asemel, mida malloc nõuab () . Nii malloc () kui calloc () on funktsioonid, mida C programmeerimiskeel pakub dünaamilise mälu eraldamise ja de-eraldamise ajal.

Enne kui mõista malloc () ja calloc () funktsioone, saame kõigepealt mõista dünaamilise mälu eraldamise tähendust. Mälu jaotamine on arvuti mälu määramise kord programmide ja protsesside teostamiseks. Me kasutame dünaamilisi eraldusmeetodeid, kui ei ole teada, kui palju mälumahtu programmile ja protsessile vaja.

Dünaamiline mälu jaotus tekib staatilise mälu eraldamisega seotud probleemide tõttu, näiteks kui salvestatakse vähem elemente, siis ülejäänud mälu raisatakse tarbetult. Seetõttu ületab see staatilise mälu eraldamise probleeme, kui mälu eraldatakse ainult siis, kui see on vajalik.

Võrdluskaart

Võrdluse alusmalloc ()calloc ()
Plokkide arvMäärab nõutava mälu ühe ploki.
Määrab soovitud mälu mitu plokki.
Süntaksitühine * malloc (size_t size);void * calloc (size_t num, size_t suurus);
Initsialiseeriminemalloc () ei eralda eraldatud mälu ja ei alusta seda.Eraldatud mälu lähtestatakse nulliga, kasutades calloc ().
Jaotamise viisMalloc () funktsioon eraldab kuhjast suuruse suuruse mälu.calloc () funktsioon eraldab mälu, mille suurus on võrdne num * suurusega.
KiirusKiireSuhteliselt aeglane.

Malloki mõiste ()

Malloc funktsioon määrab mälu ploki baitides . Kasutaja peab andma ploki suuruse, mis on selle kasutamiseks vajalik.

Malloc funktsiooniprogrammi kaudu nõuab süsteem RAM-i mälu eraldamiseks, kui taotlus rahuldatakse (st malloc-funktsioon ütleb edukalt mälu eraldamisel), tagastab ta esimese mäluploki. See tagastab tühiku tüüpi kursorit, mis tähendab, et igat tüüpi kursorit saab määrata.

Kuigi see tagastab NULL-i, kui malloc-funktsioonid ei suuda vajalikku mälumahu eraldada. Malloc-funktsioon on kättesaadav TURBO C-s, päisefailis alloc.h või stdlib.h ja stdlib.h on see saadaval päisefailis .

SYNTAX

Selle funktsiooni süntaks on järgmine:

malloc(number of elements * size of each element);

näiteks,
int *ptr;
ptr=malloc(10*sizeof (int))

Kui suurus näitab baitides nõutavat mälu (st eraldatavate mälukohtade arvu).

Kuid nagu eespool mainitud, tagastab Malloc funktsioon tühja pointeri, mistõttu on vajalik, et valatud operaator muudaks tagastatud kursoritüüpi vastavalt meie vajadusele, ülaltoodud deklaratsiooni võib esitada järgmises vormis:

ptr_var=(type_cast* ) malloc (size)

Kui ptr_var on pointeri nimi, mis säilitab eraldatud mälu ploki alguse aadressi, siis type_cast on andmeliik, millesse tagastatud pointer (või tüüp void) tuleb teisendada, ja suurus kirjeldab eraldatud mälu ploki suurust baitides .

Näiteks:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Malloc funktsiooniga eraldatud mälu sisaldab prügi väärtust .

Pange tähele, et selleks, et kontrollida, kas malloc genereerib vastava taotluse süsteemimälu poolt antud mälu eraldamiseks, või lükatakse see tagasi (juhul kui vajalik ruum pole saadaval). Me võime kasutada kinnisvara, milles vajalikku mälumahu ei määrata, kui malloc funktsioon naaseb NULL-i.

Calloci määratlus ()

Calloc- funktsioon toimib täpselt samamoodi nagu malloc- funktsioon, välja arvatud asjaolu, et see nõuab kahte argumenti nagu malloc () puhul on vaja ainult ühte argumenti.

Näiteks:
int*ptr;
ptr = (int*)calloc(10, 2);

Siin määratletakse siin andmeliigi suurus baidis, mille jaoks me soovime eraldamist, mis on antud juhul täisarvude puhul 2. Ja 10 tähistavad elementide arvu, mille jaoks eraldamine toimub.

Pidage meeles, et argument malloc'ile edastatud argument oli (n * 10), see on üks argument, mida ei tohi segi ajada, sest mitu argumenti eraldatakse alati komadega. Argumendil (n * 10) pole omavahel komasid. Seega on tegemist ühe argumendiga, kuigi mitte lihtsalt, vaid väljendiga.

Ülaltoodud deklaratsiooni juurde naasmine, pärast ülaltoodud avalduse täitmist, eraldatakse päringuprogrammile 20 baiti mälu plokk ja esimese ploki aadress määratakse päringu esitanud programmile ning esimese ploki aadress määratakse kursorile ptr.

Calloc funktsiooniga eraldatud mälu hoiab kõik nullid. Calloc-funktsioon on saadaval ka päisefailis või TURBO C.

Peamised erinevused malloc ja calloc vahel

Peamised erinevused malloc ja calloc funktsioonide vahel on järgmised:

  1. Mallocis on määratud nõutud mälu üks plokk, samal ajal kui calloc eraldab taotletud mälu mitu plokki.
  2. Malloc-funktsioon ei kustuta ja vormindab eraldatud mälu. See sisaldab prügi väärtust ja eraldatud mälu elementi ei saa muuta. Vastupidi, calloc lähtestab eraldatud mälu nullini.
  3. malloc on kiirem kui calloc tänu täiendavatele alustamisetappidele kõnekeeles, kuid erinevus on tühine.
  4. Teine erinevus nende kahe vahel on see, et calloc on malloc + memset, memset eraldab füüsilised leheküljed mälus, samal ajal kui malloc omistab mälu ainult virtuaalse aadressi hunnikust.

Järeldus:

Mälu eraldamiseks kasutatakse nii mallok- kui ka calloc-funktsioone ning neil on teatud kindel eelis ja halvem olukord nagu malloc on kiire, võrreldes calloc'iga. Veelgi enam, malloc on lihtsam kasutada, sest see võtab vaid ühe argumendi, sest calloc eraldab mälu ja vormindab mälupiirkonna ZEROga. Kuid te eelistaksite kasutada calloci, kui muutuja initsialiseerimine on teile tähtsam.

Top