Rozdiel medzi calloc a malloc

Kľúčový rozdiel - calloc vs malloc

Pri programovaní je potrebné ukladať dáta. Dáta sa ukladajú do pamäte. Tieto miesta v pamäti sú známe ako premenné. Každá premenná má špecifický typ. Môžu to byť celé čísla, plaváky, štvorhra, znaky atď. Existujú tiež dátové štruktúry, ktoré môžu ukladať 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é priradiť hodnotu indexu vyššiemu ako deklarovaná veľkosť. Pridelenie pamäte je pevné a v čase vykonávania sa nedá zmeniť. Inou metódou prideľovania pamäte je dynamické prideľovanie pamäte. Dynamické prideľovanie pamäte pomáha pri alokácii väčšieho množstva pamäte, ak je to potrebné, av prípade potreby sa uvoľňuje. Súbor hlavičky 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 to calloc pridelí pamäť a tiež inicializuje pridelené pamäťové bloky na nulu, zatiaľ čo malloc pridelí pamäť, ale neinicializuje pridelenú pamäť na nulu. Prístup k obsahu v calloc dá nulu, ale malloc dá hodnotu odpadu.

OBSAH

1. Prehľad a kľúčový rozdiel
2. Čo je calloc
3. Čo je malloc
4. Podobnosti medzi calloc a malloc
5. Porovnanie vedľa seba - calloc vs malloc v tabuľkovej forme
6. Zhrnutie

Čo je calloc?

Pridelenie pamäte je proces priraďovania pamäte pre vykonávajúce programy. Niekedy je potrebné zmeniť veľkosť pamäte. Preto sa používa dynamické prideľovanie pamäte. Uskutočňuje sa to pomocou ukazovateľov. Ukazovatele sú referenčné premenné, ktoré uchovávajú adresu inej premennej.

Obrázok 01: calloc a malloc

calloc je skratka pre „súvislé rozdelenie“. Prideľuje viac blokov pamäte s rovnakou veľkosťou. Syntax pre calloc je nasledovná. Vyžaduje si to dva argumenty. Sú to počet blokov a veľkosť každého bloku. Funkcia calloc vráti neplatný ukazovateľ, takže operátor prenášania sa používa na vrátenie typu ukazovateľa podľa požadovaného typu údajov.

        void * calloc (size_t num, size_t size);

Pozri jednoduchý jednoduchý program C.

#include

#include

int main ()

int ptr * = (int *) calloc (20, veľkosť (int));

if (ptr == NULL)

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

else

printf („Priradená pamäť“);

návrat 0;

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

Ak je pridelenie pamäte úspešné, vráti základnú adresu bloku pamäte. To znamená, že ukazovateľ ptr teraz ukazuje na základnú adresu tohto pamäťového bloku. Všetky pridelené regióny sú inicializované na nuly. Vytlačí sa správa o pridelení pamäte. Ak je priradenie pamäte neúspešné, vráti nulový ukazovateľ. Preto bude tlačiť Pamäť nie je pridelená správa.

Čo je to 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 neplatný ukazovateľ, takže operátor prenášania sa používa na vrátenie typu ukazovateľa podľa požadovaného typu údajov.

Pozrite si jednoduchý jednoduchý program C s funkciou malloc.

#include

#include

int main ()

int ptr * = (int *) malloc (10 * veľkosť (int));

if (ptr == NULL)

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

else

printf („Priradená pamäť“);

návrat 0;

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

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.
  • Obidve funkcie sa používajú na dynamické prideľovanie pamäte.
  • Ukazovateľ vrátený calloc a malloc by mal byť vrhnutý na konkrétny typ.
  • Pri úspešnom pridelení pamäte vrátia obe funkcie ukazovateľ so základnou adresou bloku pamäte.
  • Ak je priradenie 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 jazyka stdlib.h v jazyku C, ktorý prideľuje určitý počet bajtov a inicializuje ich na nulu. malloc je funkcia pre dynamické prideľovanie pamäte v hlavičkovom súbore jazyka stdlib.h jazyka C, ktorý prideľuje určitý počet bajtov.
 zmysel
calloc je skratka pre súvislé rozdelenie. malloc znamená pridelenie pamäte.
syntax
calloc sleduje syntax podobnú void * calloc (size_t_num, size_t size); malloc sleduje syntax podobnú void * malloc (size_t_size);.
 Počet argumentov
calloc berie dva argumenty. Sú to počet blokov a veľkosť každého bloku. malloc berie jeden argument. Je to počet bajtov.
rýchlosť
calloc trvá trochu dlhšie ako malloc. Je to kvôli mimoriadnemu kroku inicializácie pridelenej pamäte nulou. malloc je rýchlejší ako calloc.

Zhrnutie - calloc vs malloc

Pri prideľovaní statickej pamäte, ako napríklad pomocou polí, je pamäť pevná. Ak je uložených málo prvkov, potom je zvyšná časť pamäte zbytočná. Môže tiež spôsobiť chyby, keď je alokovaná pamäť malá ako požadovaná pamäť. Preto sa používa dynamické prideľovanie pamäte. V jazyku C poskytujú calloc a malloc dynamické alokovanie 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 súbor PDF calloc vs malloc

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

referencie:

1.Kumar, Krishan. "Rozdiel medzi Malloc a Calloc v C." Cs-Fundamentals.com, Cs-Fundamentals.com. K dispozícii tu  
2. „Priradenie dynamickej pamäte C“. Wikipedia, Wikimedia Foundation, 13. januára 2018. K dispozícii tu 
3. „Calloc () verzus malloc ().“ GeeksforGeeks, 14. júna 2017. K dispozícii tu