Rozdiel medzi calloc a malloc

Obsah:

Rozdiel medzi calloc a malloc
Rozdiel medzi calloc a malloc

Video: Rozdiel medzi calloc a malloc

Video: Rozdiel medzi calloc a malloc
Video: CS50 2013 - Week 5, continued 2024, November
Anonim

Kľúčový rozdiel – calloc vs malloc

Pri programovaní je potrebné ukladať dáta. Dáta sú uložené v pamäti. Tieto pamäťové miesta sú známe ako premenné. Každá premenná má špecifický typ. Môžu to byť celé čísla, pohyblivé čísla, dvojité znaky, znaky atď. Existujú aj dátové štruktúry, ktoré môžu uchovávať sekvenčnú kolekciu prvkov rovnakého typu s pevnou veľkosťou. Je to pole. Programátor musí deklarovať veľkosť poľa. Ak programátor deklaruje pole celých čísel pre päť prvkov, nie je možné indexu priradiť hodnotu vyššiu ako je deklarovaná veľkosť. Pridelenie pamäte je pevné a nemožno ho zmeniť v čase spustenia. Ďalšou metódou prideľovania pamäte je dynamické prideľovanie pamäte. Dynamická alokácia pamäte pomáha v prípade potreby prideliť viac pamäte a v prípade potreby ju uvoľniť. Hlavičkový súbor má štyri funkcie na dynamické prideľovanie pamäte. calloc a malloc sú dve takéto funkcie. Kľúčový rozdiel medzi calloc a malloc je v tom, že calloc prideľuje pamäť a tiež inicializuje pridelené pamäťové bloky na nulu, zatiaľ čo malloc prideľuje pamäť, ale neinicializuje pridelenú pamäť na nulu. Prístup k obsahu v calloc poskytne nulu, ale malloc poskytne hodnotu odpadu.

Čo je calloc?

Alokácia pamäte je proces prideľovania pamäte pre vykonávané programy. Niekedy je potrebné zmeniť veľkosť pamäte. Preto sa používa dynamická alokácia pamäte. Vykonáva sa pomocou ukazovateľov. Ukazovatele sú referenčné premenné, ktoré obsahujú adresu inej premennej.

Rozdiel medzi calloc a malloc
Rozdiel medzi calloc a malloc

Obrázok 01: calloc a malloc

calloc znamená „súvislú alokáciu“. Prideľuje viacero blokov pamäte s rovnakou veľkosťou. Syntax pre calloc je nasledovná. Chce to dva argumenty. Sú to počet blokov a veľkosť každého bloku. Funkcia calloc vracia ukazovateľ void, takže na vrátenie typu ukazovateľa podľa požadovaného dátového typu sa používa operátor cast.

voidcalloc(size_t num, size_t size);

Pozri nižšie uvedený jednoduchý program C.

include

include

int main(){

int ptr=(int) calloc(20, sizeof(int));

if (ptr==NULL){

printf(“Pamäť nie je pridelená”);

}

else{

printf(“Pamäť je pridelená”);

}

return 0;

}

Podľa vyššie uvedeného programu je alokovaný súvislý blok pamäte, ktorý pojme 20 prvkov. Každý bude mať veľkosť celého čísla. Sizeof(int) sa používa, pretože typ celého čísla sa líši od kompilátora k kompilátoru.

Ak je pridelenie pamäte úspešné, vráti základnú adresu bloku pamäte. Znamená to, že ukazovateľ ptr teraz ukazuje na základnú adresu tohto pamäťového bloku. Všetky pridelené oblasti sú inicializované na nuly. Vytlačí správu Memory Allocated. Ak je alokácia pamäte neúspešná, vráti nulový ukazovateľ. Preto vytlačí správu Pamäť nie je pridelená.

Čo je malloc?

Funkcia malloc sa používa na pridelenie požadovaného množstva bajtov v pamäti. Syntax pre malloc je nasledovná. Veľkosť predstavuje požadovanú pamäť v bajtoch.

void malloc(size_t_size);

Funkcia malloc vracia ukazovateľ neplatnosti, takže na vrátenie typu ukazovateľa podľa požadovaného dátového typu sa používa operátor cast.

Pozri nižšie uvedený jednoduchý program C s funkciou malloc.

include

include

int main(){

int ptr=(int) malloc (10sizeof(int));

if (ptr==NULL){

printf(“Pamäť nie je pridelená”);

}

else{

printf(“Pamäť je pridelená”);

}

return 0;

}

Podľa vyššie uvedeného programu bude pridelený blok pamäte. Ukazovateľ ukazuje na počiatočnú adresu pridelenej pamäte. Vrátený ukazovateľ sa skonvertuje na celočíselný typ. Ak je pridelená pamäť, vytlačí sa správa o pridelení pamäte. Ak pamäť nie je pridelená, vráti sa nulový ukazovateľ. Preto sa vytlačí správa o nepridelení pamäte.

Aké sú podobnosti medzi calloc a malloc?

  • Obe tieto funkcie sú deklarované v hlavičkovom súbore. Je to štandardný súbor hlavičky knižnice.
  • Obe funkcie sa používajú na dynamické prideľovanie pamäte.
  • Ukazovateľ vrátený calloc a malloc by mal byť prenesený do konkrétneho typu.
  • Pri úspešnom pridelení pamäte obe funkcie vrátia ukazovateľ so základnou adresou bloku pamäte.
  • Ak je pridelenie pamäte neúspešné, vráti sa nulový ukazovateľ.

Aký je rozdiel medzi calloc a malloc?

calloc vs malloc

calloc je funkcia na dynamické prideľovanie pamäte v hlavičkovom súbore stdlib.h v jazyku C, ktorá prideľuje konkrétny počet bajtov a inicializuje ich na nulu. malloc je funkcia na dynamické prideľovanie pamäte v hlavičkovom súbore stdlib.h v jazyku C, ktorá prideľuje konkrétny počet bajtov.
Význam
calloc znamená súvislú alokáciu. malloc znamená pridelenie pamäte.
Syntax
calloc má syntax podobnú void calloc(size_t_num, size_t size); malloc má syntax podobnú void malloc(size_t_size);.
Počet argumentov
calloc má dva argumenty. Ide o počet blokov a veľkosť každého bloku. malloc má jeden argument. Je to počet bajtov.
Speed
calloc trvá o niečo dlhšie ako malloc. Je to kvôli ďalšiemu kroku inicializácie pridelenej pamäte nulou. malloc je rýchlejší ako calloc.

Zhrnutie – calloc vs malloc

Pri statickom prideľovaní pamäte, ako napríklad pomocou polí, je pamäť pevná. Ak je uložených málo prvkov, zvyšok pamäte sa stratí. Môže tiež spôsobiť chyby, keď je pridelená pamäť menšia ako požadovaná pamäť. Preto sa používa dynamická alokácia pamäte. V jazyku C calloc a malloc poskytujú dynamickú alokáciu pamäte. Rozdiel medzi calloc a malloc je v tom, že calloc prideľuje pamäť a tiež inicializuje pridelené pamäťové bloky na nulu, zatiaľ čo malloc prideľuje pamäť, ale neinicializuje pamäťové bloky na nulu. Malloc má dva argumenty, zatiaľ čo calloc má dva argumenty.

Stiahnite si PDF calloc vs malloc

Verziu tohto článku si môžete stiahnuť vo formáte PDF a použiť ju na offline účely podľa citácie. Stiahnite si verziu PDF tu: Rozdiel medzi calloc a malloc

Odporúča: