Rozdíl mezi malloc() a calloc()

Klíčové rozdíly mezi malloc() a calloc()

  • Funkce malloc() vrací pouze počáteční adresu a nedělá ji nulou, na druhou stranu funkce calloc() vrací počáteční adresu a dělá ji nulou.
  • Ve funkci malloc je počet argumentů 1, zatímco ve funkci calloc je počet argumentů 2.
  • časová účinnost malloc() je vyšší než calloc(), zatímco malloc() není bezpečný ve srovnání s calloc()
  • malloc neinicializuje paměť, zatímco calloc provádí inicializaci paměti.
malloc() vs calloc()
malloc() vs calloc()

Co je dynamické přidělování paměti?

Dynamická alokace paměti je proces alokace paměti za běhu. Existují čtyři knihovní rutiny, calloc(), free(), realloc()a malloc(), kterou lze použít k alokaci paměti a jejímu uvolnění během provádění programu. Tyto rutiny jsou definovány v záhlaví souboru s názvem stdlib.h.

Co je malloc()?

Je to funkce, která se používá k dynamickému přidělování bloku paměti. Vyhradí paměťový prostor zadané velikosti a vrátí nulový ukazatel ukazující na místo v paměti.

Vrácený ukazatel je obvykle typu void. To znamená, že k jakémukoli ukazateli můžeme přiřadit funkci malloc. Úplnou formou malloc je alokace paměti.

Co je calloc()?

Funkce Calloc(). se používá k alokaci více bloků paměti. Je to funkce dynamického přidělování paměti, která se používá k přidělování paměti složitým datovým strukturám, jako jsou pole a struktury. Pokud se této funkci nepodaří přidělit dostatek místa, jak je uvedeno, vrátí ukazatel null. Úplná forma funkce calloc je souvislá alokace.

Rozdíl mezi malloc() a calloc()

Zde je důležitý rozdíl mezi malloc() vs calloc():

malloc () calloc()
Funkce Malloc() vytvoří jeden blok paměti o velikosti určené uživatelem. Funkce Calloc() může proměnnou 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 1. Počet argumentů je 2.
Calloc je pomalejší než malloc. Malloc je rychlejší než calloc.
Není bezpečný ve srovnání s calloc. Jeho použití je bezpečné ve srovnání s malloc.
Časová efektivita je vyšší než calloc(). Časová efektivita je nižší než malloc().
Funkce Malloc() vrací pouze počáteční adresu a nedělá z ní nulu. Před přidělením adresy vrátí funkce Calloc() počáteční adresu a nastaví ji na nulu.
Neprovádí inicializaci paměti. Provádí inicializaci paměti.

Syntaxe malloc()

Zde je syntaxe malloc()

ptr = (cast_type *) malloc (byte_size);

Ve výše uvedené syntaxi je ptr ukazatel na typ_castu. Funkce malloc vrací ukazatel na přidělenou paměť velikosti byte_size.

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

Po úspěšném provedení tohoto příkazu je rezervován paměťový prostor o velikosti 50 bajtů. Adresa prvního bytu rezervované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 alokaci n paměťových bloků stejné velikosti. Po přidělení paměťového prostoru jsou všechny bajty inicializovány na nulu. Je vrácen ukazatel, který je aktuálně na prvním bajtu přiděleného paměťového prostoru.

Příklad malloc() v C

V níže uvedeném kódu se sizeof(*ptr) používá k alokaci bloku paměti o 15 celých číslech. V příkazu printf zjišťujeme hodnotu 6. celého čísla.

#include<stdlib.h>
#include<stdio.h>
int 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 6. celého čísla je 480

Příklad calloc() v C

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

Cyklus For se používá k iteraci hodnoty proměnné „i“ a vytištění součtu. A konečně, funkce bez funkce se používá k uvolnění ukazatele.

#include <stdio.h>
#include <stdlib.h>
    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

Proč používat malloc()?

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

  • Malloc() byste měli použít, když musíte alokovat paměť za běhu.
  • Malloc byste měli použít, když musíte alokovat objekty, které musí existovat po provedení aktuálního paměťového bloku.
  • Pokud potřebujete alokovat paměť větší, než je velikost tohoto zásobníku, použijte malloc().
  • Vrátí ukazatel na první bajt přiděleného prostoru.
  • Umožňuje vývojářům alokovat 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()?

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

  • Když musíte nastavit přidělenou paměť na nulu.
  • Můžete použít calloc, který vrací ukazatel pro získání přístupu k hromadě 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é pomocí malloc()
  • Použijte calloc() k vyžádání stránky, o které je známo, že je již vynulována.