Diferenca kryesore – calloc vs malloc
Në programim, është e nevojshme të ruhen të dhënat. Të dhënat ruhen në memorie. Këto vende memorie njihen si variabla. Çdo variabël ka një lloj specifik. Ato mund të jenë numra të plotë, float, dyshe, karaktere etj. Ekzistojnë gjithashtu struktura të dhënash që mund të ruajnë një koleksion sekuencial me madhësi fikse të elementeve të të njëjtit lloj. Është një grup. Programuesi duhet të deklarojë madhësinë e grupit. Nëse programuesi deklaron një grup numrash të plotë për pesë elementë, nuk është e mundur të caktohet një vlerë për një indeks më të lartë se madhësia e deklaruar. Shpërndarja e kujtesës është fikse dhe nuk mund të ndryshohet në kohën e ekzekutimit. Metoda tjetër e alokimit të memories është shpërndarja dinamike e memories. Shpërndarja dinamike e memories ndihmon në ndarjen e më shumë memorie kur kërkohet dhe lirimin kur është e nevojshme. Skedari i kokës ka katër funksione për alokimin dinamik të memories. calloc dhe malloc janë dy funksione të tilla. Dallimi kryesor midis calloc dhe malloc është se calloc shpërndan kujtesën dhe gjithashtu inicializon blloqet e alokuara të memories në zero ndërsa malloc shpërndan kujtesën, por nuk e inicializon atë memorie të alokuar në zero. Qasja në përmbajtje në calloc do të japë zero, por malloc do të japë një vlerë mbeturinash.
Çfarë është calloc?
Alokimi i memories është procesi i caktimit të memories për programet ekzekutuese. Ndonjëherë është e nevojshme të ndryshoni madhësinë e kujtesës. Prandaj, përdoret alokimi dinamik i memories. Bëhet duke përdorur tregues. Treguesit janë variabla referimi që mbajnë adresën e një ndryshoreje tjetër.
Figura 01: calloc dhe malloc
calloc qëndron për "ndarje të vazhdueshme". Ai shpërndan blloqe të shumta memorie me të njëjtën madhësi. Sintaksa për calloc është si më poshtë. Duhen dy argumente. Ato janë numri i blloqeve dhe madhësia e secilit bllok. Funksioni calloc kthen një tregues void, kështu që një operator cast përdoret për të kthyer llojin e treguesit sipas llojit të kërkuar të të dhënave.
voidcalloc(size_t num, size_t size);
Referojuni programit të thjeshtë C më poshtë.
përfshi
përfshi
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf("Kujtesa nuk është ndarë");
}
tjetër{
printf("Kujtesa është ndarë");
}
kthim 0;
}
Sipas programit të mësipërm, ndahet një bllok i memories së vazhdueshme që mund të mbajë 20 elementë. Secili do të ketë madhësinë e një numri të plotë. Madhësia e(int) përdoret sepse lloji i numrit të plotë ndryshon nga përpiluesi në përpilues.
Nëse shpërndarja e memories është e suksesshme, ajo do të kthejë adresën bazë të bllokut të memories. Do të thotë që treguesi ptr tani po tregon adresën bazë të atij blloku të memories. Të gjitha rajonet e alokuara janë inicializuar në zero. Do të printojë mesazhin Memory Allocated. Nëse shpërndarja e memories është e pasuksesshme, ajo do të kthejë treguesin null. Prandaj, do të printojë Mesazhi i kujtesës nuk është ndarë.
Çfarë është malloc?
Funksioni malloc përdoret për të ndarë sasinë e kërkuar të bajteve në memorie. Sintaksa për malloc është si më poshtë. Madhësia përfaqëson kujtesën e kërkuar në bajt.
void malloc(size_t_size);
Funksioni malloc kthen një tregues void, kështu që një operator cast përdoret për të kthyer llojin e treguesit sipas llojit të kërkuar të të dhënave.
Referojuni programit të thjeshtë C më poshtë me funksion malloc.
përfshi
përfshi
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf("Kujtesa nuk është ndarë");
}
tjetër{
printf("Kujtesa është ndarë");
}
kthim 0;
}
Sipas programit të mësipërm, do të ndahet blloku i memories. Treguesi po tregon adresën fillestare të memories së alokuar. Treguesi i kthyer konvertohet në një tip numër të plotë. Nëse ndahet memoria, do të printohet mesazhi i akorduar memorie. Nëse memoria nuk ndahet, do të kthehet një tregues null. Prandaj, mesazhi nuk është ndarë memoria do të printohet.
Cilat janë ngjashmëritë midis calloc dhe malloc?
- Të dy këto funksione janë deklaruar në skedarin e kokës. Është skedari standard i kokës së bibliotekës.
- Të dy funksionet përdoren për shpërndarje dinamike të memories.
- Treguesi i kthyer nga calloc dhe malloc duhet të hidhet në llojin specifik.
- Në alokimin e suksesshëm të memories, të dy funksionet do të kthejnë një tregues me adresën bazë të bllokut të memories.
- Nëse shpërndarja e kujtesës është e pasuksesshme, do të kthehet një tregues null.
Cili është ndryshimi midis calloc dhe malloc?
calloc vs malloc |
|
calloc është një funksion për shpërndarjen dinamike të memories në skedarin e titullit stdlib.h të gjuhës C që shpërndan një numër specifik bajtash dhe i inicializon ato në zero. | malloc është një funksion për shpërndarjen dinamike të memories në skedarin e kokës stdlib.h të gjuhës C që shpërndan një numër specifik bajtash. |
Kuptimi | |
calloc qëndron për shpërndarje të vazhdueshme. | malloc nënkupton ndarjen e memories. |
Sintaksë | |
calloc ndjek një sintaksë të ngjashme me void calloc(size_t_num, size_t size); | malloc ndjek një sintaksë të ngjashme me void malloc(size_t_size);. |
Numri i argumenteve | |
calloc merr dy argumente. Ato janë një numër blloqesh dhe madhësia e secilit bllok. | malloc merr një argument. Është një numër bajtësh. |
Shpejtësia | |
calloc zgjat pak më shumë se malloc. Kjo është për shkak të hapit shtesë të inicializimit të memories së caktuar me zero. | malloc është më i shpejtë se calloc. |
Përmbledhje – calloc vs malloc
Në alokimin e memories statike, si duke përdorur vargje, memoria është fikse. Nëse ruhen pak elementë, atëherë pjesa tjetër e memories humbet. Mund të shkaktojë gjithashtu gabime kur memoria e ndarë është e vogël se memoria e kërkuar. Prandaj, përdoret alokimi dinamik i memories. Në gjuhën C, calloc dhe malloc ofrojnë shpërndarje dinamike të memories. Dallimi midis calloc dhe malloc është se calloc alokon memorien dhe gjithashtu inicializon blloqet e memories së alokuar në zero ndërsa malloc alokon memorien por nuk inicializon blloqet e memories në zero. Malloc merr dy argumente ndërsa calloc merr dy argumente.
Shkarkoni PDF-në e calloc vs malloc
Mund ta shkarkoni versionin PDF të këtij artikulli dhe ta përdorni për qëllime jashtë linje sipas shënimit të citimit. Ju lutemi shkarkoni versionin PDF këtu: Dallimi midis calloc dhe malloc