Malloc () vs calloc (): Klíčové rozdíly vysvětlené v příkladech

Obsah:

Anonim

Než se naučíme rozdíl mezi malloc a calloc, naučme se -

Co je dynamická alokace paměti?

Dynamické přidělování paměti je proces přidělování paměti za běhu. K dispozici jsou čtyři rutiny knihovny, calloc (), free (), realloc () a malloc (), kterými lze alokovat paměť a uvolnit ji během provádění programu. Tyto rutiny jsou definovány v souboru záhlaví s názvem stdlib.h.

Co je malloc ()?

Jedná se o funkci, která se používá k dynamickému přidělení bloku paměti. Vyhrazuje si paměťový prostor zadané velikosti a vrací nulový ukazatel ukazující na paměťové místo.

Vrácený ukazatel je obvykle typu void. To znamená, že můžeme funkci malloc přiřadit libovolnému ukazateli. Plnou formou malloc je alokace paměti.

V tomto výukovém programu se naučíte:

  • Co je dynamická alokace paměti?
  • Co je malloc ()?
  • Co je calloc ()?
  • Proč používat malloc ()?
  • Proč používat calloc ()?
  • Syntaxe malloc ()
  • Syntaxe calloc ()
  • Příklad malloc () v C
  • Příklad calloc () v C
  • Rozdíl mezi calloc () a malloc ()

Co je calloc ()?

Funkce Calloc () se používá k přidělení více bloků paměti. Jedná se o funkci dynamické alokace paměti, která se používá k přidělení paměti složitým datovým strukturám, jako jsou pole a struktury. Pokud tato funkce nedokáže přidělit dostatek místa, jak je uvedeno, vrátí null ukazatel. Plnou formou funkce calloc je souvislá alokace.

Proč používat malloc ()?

Tady jsou důvody použití malloc ()

  • Malloc () byste měli použít, když musíte přidělit paměť za běhu.
  • Malloc byste měli použít, když musíte přidělit objekty, které musí existovat nad rámec provedení aktuálního bloku paměti.
  • Pokud potřebujete alokovat paměť větší než velikost tohoto zásobníku, přejděte na malloc ().
  • Vrátí ukazatel na první bajt přiděleného prostoru.
  • Umožňuje vývojářům přidělit paměť podle potřeby v přesném množství.
  • Tato funkce přiděluje velikost bloku paměti bajtů z haldy.

Proč používat calloc ()?

Tady jsou důvody použití calloc ()

  • Když musíte nastavit přidělenou paměť na nulu.
  • Můžete použít calloc, který vrací ukazatel, abyste získali přístup k haldě paměti.
  • Používá se, když potřebujete inicializovat prvky na nulu, aby se vrátil ukazatel do paměti.
  • Aby se zabránilo přetečení, které je možné s malloc ()
  • Použijte calloc () k vyžádání stránky, o které je známo, že již byla vynulována.

Syntaxe malloc ()

Zde je syntaxe malloc ()

ptr = (cast_type *) malloc (byte_size);

Ve výše uvedené syntaxi je ptr ukazatel cast_type. Funkce malloc vrací ukazatel na alokovanou paměť byte_size.

Example: ptr = (int *) malloc (50)

Když je tento příkaz úspěšně proveden, je rezervován paměťový prostor 50 bajtů. Adresa prvního bajtu vyhrazeného prostoru je přiřazena ukazateli „ptr“ typu int.

Syntaxe calloc ()

Zde je syntaxe malloc ()

ptr = (cast_type *) calloc (n, size);

Výše uvedená syntaxe se používá k přidělení n paměťových bloků stejné velikosti. Po přidělení paměťového prostoru jsou všechny bajty inicializovány na nulu. Ukazatel, který je aktuálně na prvním bajtu přiděleného paměťového prostoru, je vrácen.

Příklad malloc () v C

V níže uvedeném kódu se sizeof (* ptr) používá k přidělení paměťového bloku 15 celých čísel. V příkazu printf nacházíme hodnotu 6. celého čísla.

#include#includeint main(){int *ptr;ptr = malloc(15 * sizeof(*ptr));if (ptr != NULL) {*(ptr + 5) = 480;printf("Value of the 6th integer is %d",*(ptr + 5));}}

Výstup:

Hodnota šestého celého čísla je 480

Příklad calloc () v C

Níže uvedený program jazyka C vypočítá součet prvních deseti termínů. Pokud je hodnota ukazatele null, nebude paměťový prostor přidělen.

Smyčka For se používá k iteraci hodnoty proměnné „i“ a k tisku součtu. Nakonec se funkce free používá k uvolnění ukazatele.

#include #include int main() {int i, * ptr, sum = 0;ptr = calloc(10, sizeof(int));if (ptr == NULL) {printf("Error! memory not allocated.");exit(0);}printf("Building and calculating the sequence sum of the first 10 terms \n");for (i = 0; i < 10; ++i) { * (ptr + i) = i;sum += * (ptr + i);}printf("Sum = %d", sum);free(ptr);return 0;}

Výstup:

Sestavení a výpočet sekvenčního součtu prvních 10 členů n Součet = 45

Rozdíl mezi calloc () a malloc ()

Herer jsou důležitý rozdíl mezi malloc () a calloc ():

malloc () calloc ()
Funkce Malloc () vytvoří jeden blok paměti o velikosti určené uživatelem. Funkce Calloc () může proměnné přiřadit více bloků paměti.
Funkce Malloc obsahuje nesmyslnou hodnotu. Blok paměti přidělený funkcí calloc je vždy inicializován na nulu.
Počet argumentů je 2. Počet argumentů je 1.
Calloc je pomalejší než malloc. Malloc je rychlejší než calloc.
Není to bezpečné ve srovnání s calloc. Je bezpečné jej používat ve srovnání s malloc.
Časová účinnost je vyšší než calloc (). Časová účinnost je nižší než malloc ().
Funkce Malloc () vrací pouze počáteční adresu a nedělá ji nulovou. Před přidělením adresy funkce Calloc () vrátí počáteční adresu a nastaví ji na nulu.
Neprovádí inicializaci paměti. Provádí inicializaci paměti.

KLÍČOVÉ ROZDÍLY:

  • funkce malloc () vrací pouze počáteční adresu a na druhou stranu ji nezruší, funkce calloc () vrátí počáteční adresu a vynuluje ji.
  • Ve funkci malloc je počet argumentů 2, zatímco ve funkci calloc je počet argumentů 1.
  • malloc () časová účinnost je vyšší než calloc (), zatímco malloc () není zabezpečená ve srovnání s calloc ()
  • malloc neinicializuje paměť, zatímco calloc provádí inicializaci paměti.