Ieteicams, 2024

Redaktora Izvēle

Atšķirība starp malloc un calloc

Būtiska atšķirība starp malloc un calloc funkciju ir tā, ka calloc () ir vajadzīgs divi argumenti, nevis viens arguments, kas nepieciešams malloc () . Gan malloc (), gan calloc () ir funkcijas, kuras C programmēšanas valoda nodrošina dinamisku atmiņas sadalījumu un de-piešķiršanu darbības laikā.

Pirms saprast Malloc () un calloc () funkcijas vispirms ļaujiet mums saprast dinamiskās atmiņas piešķiršanas nozīmi. Atmiņas piešķiršana ir procedūra, ar ko datora atmiņu piešķir programmām un procesiem. Mēs izmantojam dinamiskās piešķiršanas metodes, ja nav zināms, cik daudz atmiņas ir nepieciešama programmai un procesam.

Dinamiskā atmiņas sadalīšana rodas sakarā ar problēmām, kas saistītas ar statisko atmiņas sadalījumu, piemēram, ja tiek saglabāti mazāk elementu, tad pārējā atmiņa tiek nevajadzīgi izšķērdēta. Tāpēc tā pārvar statiskās atmiņas sadalīšanas problēmas, ja atmiņa tiek piešķirta tikai tad, kad tas ir nepieciešams.

Salīdzinājuma diagramma

Salīdzināšanas pamatimalloc ()calloc ()
Bloku skaitsPiešķir vienu pieprasītās atmiņas bloku.
Piešķir vairākas pieprasītās atmiņas blokus.
Sintaksespēkā neesošs * malloc (size_t size);void * calloc (izmērs_t skaitlis, izmērs_t izmērs);
Inicializācijamalloc () neizdzēš un inicializē piešķirto atmiņu.Piešķirtā atmiņa tiek inicializēta uz nulli, izmantojot calloc ().
Piešķiršanas veidsMalloc () funkcija piešķir izmēru "izmērs" atmiņu no kaudzes.calloc () funkcija piešķir atmiņu, kuras lielums ir vienāds ar num * izmēru.
ĀtrumsĀtriSalīdzinoši lēns.

Malloc definīcija ()

Malloc funkcija piešķir atmiņas bloku baitos . Lietotājam ir skaidri jānorāda bloka izmērs, kas nepieciešams lietošanai.

Izmantojot malloc funkciju programmu, tiek pieprasīta sistēmas RAM atmiņa, ja pieprasījums tiek piešķirts (ti, malloc funkcija ir veiksmīga, piešķirot atmiņu), tā atgriež rādītāju uz pirmo atmiņas bloku. Tā atgriež tukša veida rādītāju, kas nozīmē, ka var piešķirt jebkura veida rādītāju.

Lai gan tas atgriež NULL, ja malloc funkcijas nespēj piešķirt nepieciešamo atmiņas apjomu. Malloc funkcija ir pieejama TURBO C, galvenes failā alloc.h vai stdlib.h, un UNIX tas būs pieejams galvenes failā .

SYNTAX

Šīs funkcijas sintakse ir šāda:

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

piemēram,
int *ptr;
ptr=malloc(10*sizeof (int))

Ja lielums atspoguļo vajadzīgo atmiņas apjomu baitos (ti, piešķiramo atmiņu vietu skaitu).

Bet, kā jau minēts iepriekš, funkcija malloc atgriež tukšo rādītāju, līdz ar to, pamatojoties uz mūsu vajadzību, nomainītajam rādītājam ir jāmaina atgrieztā rādītāja tips, iepriekšminēto deklarāciju var iesniegt šādā formā:

ptr_var=(type_cast* ) malloc (size)

Ja ptr_var ir rādītāja nosaukums, kas saglabā piešķirtās atmiņas bloka sākuma adresi, type_cast ir datu tips, kurā jāpārveido atgrieztais rādītājs (vai tips void), un lielums raksturo piešķirto atmiņas bloka lielumu baitos .

Piemēram:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Atmiņa, kas piešķirta ar Malloc funkciju, satur atkritumu vērtību .

Ņemiet vērā, ka, lai pārbaudītu, vai Malloc ģenerē atbilstošo pieprasījumu, lai piešķirtu sistēmas RAM piešķirto atmiņu vai noraidītu (ja nav pieejama vajadzīgā vieta). Mēs varam izmantot īpašumu, kurā vajadzīgajam atmiņas apjomam nav piešķirts Malloc funkcija atgriež NULL.

Calloc definīcija ()

Calloc funkcija darbojas tieši tāpat kā malloc funkcija, izslēdzot to, ka tas prasa divus argumentus, kā Malloc gadījumā () nepieciešams tikai viens arguments.

Piemēram:
int*ptr;
ptr = (int*)calloc(10, 2);

Šeit 2 norāda datu veida lielumu baitā, par kuru mēs vēlamies piešķirt piešķiršanu, kas šajā gadījumā ir veseli skaitļi 2. Un 10 apzīmē to elementu skaitu, kuriem jāveic piešķiršana.

Atcerieties, ka argumentam, kas nodots funkcijai malloc, bija (n * 10), tas ir viens arguments, kas nav sajaukt, jo vairāki argumenti vienmēr ir atdalīti ar komatiem. Argumentam (n * 10) nav komatu. Tādējādi tas ir viens arguments, lai gan tas nav vienkāršs, bet izteiksme.

Atgriežoties pie iepriekšminētās deklarācijas, pēc iepriekšminētā paziņojuma izpildes pieprasītājai programmai tiek piešķirts 20 baitu atmiņas bloks, un pirmā bloka adrese tiek piešķirta pieprasītājai programmai, un pirmā bloka adrese tiek piešķirta rādītājam ptr.

Atmiņa, kas piešķirta ar zvanu funkciju, satur visas nulles. Calloc funkcija ir pieejama arī galvenes failā vai TURBO C.

Galvenās atšķirības starp malloc un calloc

Galvenās atšķirības starp malloc un calloc funkcijām ir:

  1. Vienā blokā pieprasītā atmiņa tiek piešķirta malloc, bet vairāki pieprasītā atmiņas bloki tiek piešķirti ar calloc.
  2. Malloc funkcija neizdzēš un inicializē piešķirto atmiņu. Tajā ir atkritumu vērtība un piešķirto atmiņu nevar mainīt. Turpretī calloc inicializē piešķirto atmiņu līdz nullei.
  3. malloc ir ātrāks par calloc, jo ir nepieciešami papildu inicializācijas soļi calloc, bet atšķirība ir niecīga.
  4. Vēl viena atšķirība starp šīm divām ir tā, ka calloc ir malloc + memset, memset piešķir fiziskās lapas atmiņā, bet malloc piešķir atmiņu tikai no virtuālās adreses kaudzes.

Secinājums:

Atmiņas piešķiršanai tiek izmantotas gan malloc, gan calloc funkcijas, un tām ir sava priekšrocība, un trūkums, piemēram, malloc, ir ātrs, salīdzinot ar calloc. Turklāt malloc ir vieglāk izmantot, jo tas aizņem tikai vienu argumentu, jo calloc piešķir atmiņu un inicializē atmiņas zonu ar ZERO. Bet jūs vēlētos izmantot calloc, kad mainīgā inicializācija jums ir svarīgāka.

Top