Rekomenduojama, 2024

Redaktoriaus Pasirinkimas

Skirtumas tarp malloc ir calloc

Pagrindinis skirtumas tarp malloc ir calloc funkcijos yra tas, kad calloc () turi du argumentus, o ne vieną argumentą, kurio reikalauja Malloc () . Tiek „malloc“ (), tiek „calloc“ () yra funkcijos, kurias C programavimo kalba užtikrina dinaminį atminties paskirstymą ir paskirstymo nutraukimą vykdymo metu.

Prieš suprasti malloc () ir calloc () funkcijas pirmiausia suprasime dinaminės atminties paskirstymo reikšmę. Atminties paskirstymas - tai kompiuterio atminties priskyrimas programoms ir procesams atlikti. Naudojame dinaminius paskirstymo būdus, kai nėra žinoma, kiek reikia atminties vietos programai ir procesui.

Dinaminis atminties paskirstymas atsiranda dėl problemų, susijusių su statiniu atminties priskyrimu, pavyzdžiui, jei yra mažiau elementų, tada likusi atmintis yra be reikalo švaistoma. Todėl ji įveikia statinės atminties paskirstymo problemas, kai atmintis skiriama tik tada, kai to reikia.

Palyginimo diagrama

Palyginimo pagrindasmalloc ()calloc ()
Blokų skaičiusPriskiria reikalaujamos atminties bloką.
Priskiria kelis prašomos atminties blokus.
Sintaksėvoid * malloc (size_t dydis);void * calloc (size_t num, size_t dydis);
Inicijavimasmalloc () neišvalo ir inicijuoja priskirtą atmintį.Paskirta atmintis inicijuojama į nulį naudojant calloc ().
Paskirstymo būdas„malloc“ () funkcija paskirsto „dydžio“ atmintį iš krūvos.calloc () funkcija skiria atmintį, kurios dydis lygus num * dydžiui.
GreitisGreitasPalyginti lėtas.

Malloc apibrėžimas ()

Malloc“ funkcija priskiria atminties bloką baitais . Naudotojas turi aiškiai nurodyti bloką, kurį reikia naudoti.

Per „malloc“ funkcijų programą prašoma sistemos atminties priskyrimo sistemos RAM, jei prašymas yra pripažįstamas (ty „malloc“ funkcija sako, kad sėkmingai skiria atmintį), ji grąžina žymeklį į pirmąjį atminties bloką. Jis grąžina tuščiąjį rodyklės tipą, tai reiškia, kad gali būti priskirta bet kokio tipo rodyklė.

Nors ji grąžina NULL, jei malloc funkcijos negali skirti reikiamo atminties kiekio. „Malloc“ funkcija pasiekiama TURBO C, antraštės faile alloc.h arba stdlib.h, o UNIX ji bus prieinama antraštės faile .

Sintaksė

Šios funkcijos sintaksė yra tokia:

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

pavyzdžiui,
int *ptr;
ptr=malloc(10*sizeof (int))

Kur dydis nurodo reikiamo atminties dydį baitais (ty susietų atminties vietų skaičių).

Tačiau, kaip jau buvo minėta, funkcija malloc grąžina tuščią rodyklę, todėl vadovaujantis operatoriumi, atsižvelgiant į mūsų poreikį, reikia pakeisti grąžinto rodyklės tipą, minėta deklaracija gali būti pateikta tokia forma:

ptr_var=(type_cast* ) malloc (size)

Kai ptr_var yra rodyklės pavadinimas, kuris išlaiko paskirtojo atminties bloko pradinį adresą, type_cast yra duomenų tipas, į kurį turi būti transformuojamas grąžinamas žymeklis (arba tipas void), o dydis apibūdina paskirstyto atminties bloko dydį baitais .

Pavyzdžiui:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

„Malloc“ funkcija skiriama atmintyje yra šiukšlių reikšmė .

Atkreipkite dėmesį, kad, norėdami patikrinti, ar malloc generuoja atitinkamą užklausą sistemos RAM suteiktai atmintai priskirti arba atmesti (jei nėra reikalingos vietos). Mes galime panaudoti turtą, kuriame nereikalingas atminties kiekis, o Malloc funkcija grąžina NULL.

Calloc apibrėžimas ()

Calloc funkcija veikia lygiai taip pat, kaip ir Malloc funkcija, išskyrus tai, kad jai reikia dviejų argumentų, nes malloc () atveju reikia tik vieno argumento.

Pavyzdžiui:
int*ptr;
ptr = (int*)calloc(10, 2);

Čia 2 nurodomas duomenų tipo dydis baitui, kuriam mes norime, kad paskirstymas būtų atliktas, o tai yra 2 skaičiai sveikiesiems skaičiams. 10 žymi elementų, kuriems turi būti skiriama suma, skaičių.

Atminkite, kad argumentas, perduotas funkcijai malloc, buvo (n * 10), tai yra vienas argumentas, kurio negalima painioti, nes kelis argumentus visada skiria kableliais. Argumentas (n * 10) tarp kablelio nėra. Taigi tai yra vienas argumentas, nors ir ne paprastas, bet išraiška.

Grįžus prie minėtos deklaracijos, atlikus aukščiau nurodytą pareiškimą, prašančiajai programai priskiriamas 20 baitų atminties blokas, o pirmojo bloko adresas priskiriamas prašančiajai programai, o pirmojo bloko adresas priskiriamas žymekliui ptr.

Atmintis, paskirta skambinimo funkcija, turi visus nulius. Calloc funkcija taip pat galima gauti antraštės faile arba TURBO C.

Pagrindiniai skirtumai tarp malloc ir calloc

Pagrindiniai skirtumai tarp malloc ir calloc funkcijų yra šie:

  1. „Malloc“ priskiriamas vienas reikalaujamos atminties blokas, tuo tarpu, kai „calloc“ skiria kelis pageidaujamos atminties blokus.
  2. Malloc funkcija neišvalo ir inicijuoja priskirtą atmintį. Jame yra šiukšlių reikšmė, o skiriamosios atminties elementas negali būti pakeistas. Priešingai, calloc inicijuoja priskirtą atmintį iki nulio.
  3. malloc yra greitesnis už calloc, nes reikalingas papildomas iniciacijos etapas skambutyje, tačiau skirtumas yra nereikšmingas.
  4. Kitas skirtumas tarp šių dviejų yra tas, kad calloc yra malloc + memset, memset skiria fizinius puslapius atmintyje, o malloc priskiria atmintį tik iš virtualaus adreso krūvos.

Išvada:

Tiek malloc, tiek calloc funkcijos naudojamos atminties paskirstymui ir jų tam tikras pranašumas, o nepalanki padėtis, kaip malloc, yra greita, palyginti su calloc. Be to, malloc lengviau naudoti, nes užtrunka tik vieną argumentą, nes calloc skiria atmintį ir inicijuoja atminties zoną su ZERO. Bet jūs norėtumėte naudoti calloc, kai kintamasis inicijavimas jums yra svarbesnis.

Top