Plānojot, ir nepieciešams saglabāt datus. Dati tiek glabāti atmiņā. Šīs atmiņas vietas sauc par mainīgajiem. Katram mainīgajam ir noteikts tips. Tie var būt veseli skaitļi, pludiņi, dubultzīmes, rakstzīmes utt. Ir arī datu struktūras, kas var saglabāt fiksēta lieluma secīgu viena veida elementu kolekciju. Tas ir masīvs. Programmētājam ir jādeklarē masīva lielums. Ja programmētājs deklarē veselu skaitļu masīvu pieciem elementiem, indeksam nav iespējams piešķirt vērtību, kas ir augstāka par deklarēto lielumu. Atmiņas iedalījums ir fiksēts, un to nevar mainīt izpildes laikā. Cita atmiņas piešķiršanas metode ir dinamiskā atmiņas piešķiršana. Dinamiska atmiņas sadale palīdz pēc vajadzības atdalīt vairāk atmiņas un vajadzības gadījumā atbrīvot. Galvenes failam ir četras funkcijas dinamiskai atmiņas sadalei. kalloks un malloks ir divas šādas funkcijas. galvenā atšķirība starp kalloku un malloku ir tas, ka calloc piešķir atmiņu un arī inicializē piešķirtos atmiņas blokus līdz nullei, turpretim malloc piešķir atmiņu, bet neinicializē šo atvēlēto atmiņu līdz nullei. Piekļuve saturam kallokā dos nulli, bet malloc piešķirs atkritumu vērtību.
1. Pārskats un galvenās atšķirības
2. Kas ir kalloks
3. Kas ir malloc?
4. Līdzības starp kalloku un malloku
5. Salīdzinājums blakus - calloc vs malloc tabulas formā
6. Kopsavilkums
Atmiņas piešķiršana ir process, kurā atmiņai piešķir izpildes programmas. Dažreiz ir jāmaina atmiņas lielums. Tādēļ tiek izmantota dinamiskā atmiņas sadale. Tas tiek veikts, izmantojot norādes. Norādes ir atsauces mainīgie, kas satur cita mainīgā adresi.
01. attēls: kalloks un malloks
kalloks nozīmē “blakus esošo sadali”. Tas piešķir vairākus atmiņas blokus ar vienādu izmēru. Kalloka sintakse ir šāda. Tam nepieciešami divi argumenti. Tie ir bloku skaits un katra bloka lielums. Funkcija calloc atgriež tukšo rādītāju, tāpēc lietais operators tiek izmantots, lai atgrieztu rādītāja tipu atbilstoši nepieciešamajam datu tipam.
void * calloc (lielums_num, izmērs_t lielums);
Skatiet zemāk redzamo vienkāršo C programmu.
# iekļaut
# iekļaut
int galvenā ()
int ptr * = (int *) kalloks (20, izmērs (int));
if (ptr == NULL)
printf (“Atmiņa netiek piešķirta”);
cits
printf (“Atmiņa tiek piešķirta”);
atgriešanās 0;
Saskaņā ar iepriekšminēto programmu tiek piešķirts blakus esošais atmiņas bloks, kurā var ietilpt 20 elementi. Katram būs vesels skaitlis. Tiek izmantots lielums int (int), jo vesela skaitļa tips katram kompilatoram atšķiras.
Ja atmiņas piešķiršana ir veiksmīga, tā atgriezīs atmiņas bloka bāzes adresi. Tas nozīmē, ka rādītājs ptr tagad norāda uz šī atmiņas bloka bāzes adresi. Visi piešķirtie reģioni tiek inicializēti ar nullēm. Tas izdrukās atmiņai piešķirto ziņojumu. Ja atmiņas piešķiršana nav veiksmīga, tas atgriezīs nulles rādītāju. Tāpēc tas izdrukās Atmiņa netiek piešķirta.
Malloc funkcija tiek izmantota, lai atmiņā piešķirtu nepieciešamo baitu daudzumu. Malloc sintakse ir šāda. Izmērs norāda nepieciešamo atmiņu baitos.
void * malloc (lielums_t_izmērs);
Funkcija malloc atgriež tukšo rādītāju, tāpēc cast operators tiek izmantots, lai atgrieztu rādītāja tipu atbilstoši nepieciešamajam datu tipam.
Skatiet zemāk redzamo vienkāršo C programmu ar malloc funkciju.
# iekļaut
# iekļaut
int galvenā ()
int ptr * = (int *) malloc (10 * sizeof (int));
if (ptr == NULL)
printf (“Atmiņa netiek piešķirta”);
cits
printf (“Atmiņa tiek piešķirta”);
atgriešanās 0;
Saskaņā ar iepriekšminēto programmu tiks piešķirts atmiņas bloks. Rādītājs norāda uz piešķirtās atmiņas sākuma adresi. Atgrieztais rādītājs tiek pārveidots par veselu skaitli. Ja atmiņa tiek piešķirta, tā drukās atmiņai piešķirto ziņojumu. Ja atmiņa netiek piešķirta, atgriezīsies nulles rādītājs. Tāpēc atmiņai nav piešķirta ziņa tiks izdrukāta.
calloc vs malloc | |
calloc ir dinamiskas atmiņas piešķiršanas funkcija C valodas stdlib.h galvenes failā, kas piešķir noteiktu baitu skaitu un inicializē tos līdz nullei. | malloc ir funkcija dinamiskai atmiņas piešķiršanai C valodas stdlib.h galvenes failā, kas piešķir noteiktu baitu skaitu. |
Nozīme | |
kalloks nozīmē blakus esošo sadalījumu. | malloc apzīmē atmiņas piešķiršanu. |
Sintakse | |
kalloks seko sintaksei, kas līdzīga void * calloc (lielums_t_num, lielums_t lielums); | malloc seko sintaksei, kas līdzīga void * malloc (lielums_t_izmērs);. |
Argumentu skaits | |
kallokam ir divi argumenti. Tie ir bloku skaits un katra bloka lielums. | malloc ņem vienu argumentu. Tas ir vairāki baiti. |
Ātrums | |
kalloks prasa nedaudz vairāk laika nekā malloc. Tas ir tāpēc, ka papildu solis ir inicializēt piešķirto atmiņu ar nulli. | malloc ir ātrāks nekā calloc. |
Statiskā atmiņas sadalījumā, piemēram, izmantojot masīvus, atmiņa ir fiksēta. Ja tiek saglabāti maz elementu, pārējā atmiņa tiek izšķiesta. Tas var izraisīt kļūdas arī tad, ja atvēlētā atmiņa ir maza nekā nepieciešamā atmiņa. Tādēļ tiek izmantota dinamiskā atmiņas sadale. C valodā kalloks un malloks nodrošina dinamisku atmiņas sadalījumu. Atšķirība starp calloc un malloc ir tāda, ka calloc piešķir atmiņu un arī inicializē piešķirtos atmiņas blokus uz nulli, kamēr malloc piešķir atmiņu, bet neinicializē atmiņas blokus uz nulli. Malloks ņem divus argumentus, bet kalloks - divus argumentus.
Varat lejupielādēt šī raksta PDF versiju un izmantot to bezsaistes vajadzībām, kā norādīts citēšanas piezīmē. Lūdzu, lejupielādējiet PDF versiju šeit: Atšķirība starp kalloku un malloku
1.Kumars, Krišjānis. “Atšķirība starp Malloc un Calloc C. Cs-Fundamentals.com, Cs-Fundamentals.com. Pieejams šeit
2. “C dinamiskās atmiņas piešķiršana.” Wikipedia, Wikimedia Foundation, 2018. gada 13. janvārī. Pieejams šeit
3. “Calloc () pret malloc ()”. GeeksforGeeks, 2017. gada 14. jūnijs. Pieejams šeit