Doporučená, 2024

Redakce Choice

Rozdíl mezi malloc a calloc

Základní rozdíl mezi funkcí malloc a calloc je, že calloc () potřebuje dva argumenty namísto jednoho argumentu, který je vyžadován malloc () . Malloc () a calloc () jsou funkce, které programovací jazyk C poskytuje pro dynamickou alokaci paměti a de-alokaci v době běhu.

Před pochopením malloc () a calloc () funkcí nejprve pochopíme význam dynamické alokace paměti. Přidělení paměti je postup přiřazení paměti počítače k ​​provádění programů a procesů. Používáme techniky dynamického přidělování, pokud není známo, kolik místa paměti je pro program a proces potřeba.

Dynamické přidělení paměti vzniká v důsledku problémů spojených se statickou alokací paměti, například pokud je uloženo méně prvků, zbytečně zbytečně zbývá zbytek paměti. Proto překonává problémy statické alokace paměti, kde je paměť přidělována pouze tehdy, když je vyžadována.

Srovnávací graf

Základy srovnánímalloc ()calloc ()
Počet blokůPřiřadí jeden blok požadované paměti.
Přiřadí více bloků požadované paměti.
Syntaxvoid * malloc (size_t size);void * calloc (size_t num, size_t size);
Inicializacemalloc () nezruší a inicializuje přidělenou paměť.Přidělená paměť je inicializována na nulu pomocí calloc ().
Způsob přiděleníFunkce malloc () přiděluje z haldy paměť velikosti „size“.Funkce calloc () přiděluje paměť, jejíž velikost se rovná num * velikosti.
RychlostRychlePoměrně pomalá.

Definice malloc ()

Funkce malloc přiřadí blok paměti v bytech . Uživatel by měl explicitně dát velikost bloku, kterou vyžaduje pro použití.

Prostřednictvím malloc funkce program vyžaduje RAM systému pro přidělení paměti, pokud je požadavek uznán (tj. Funkce malloc říká úspěšné při přidělení paměti), vrátí ukazatel na první blok paměti. Vrátí neplatný typ ukazatele, což znamená, že lze přiřadit libovolný typ ukazatele.

Ačkoli vrátí hodnotu NULL, pokud funkce malloc není schopen přidělit požadované množství paměti. Funkce malloc je dostupná v TURBO C, záhlaví souboru alloc.h nebo stdlib.h, a na UNIXu bude k dispozici v záhlaví souboru .

SYNTAX

Syntaxe této funkce je následující:

malloc(number of elements * size of each element);

například,
int *ptr;
ptr=malloc(10*sizeof (int))

Pokud velikost představuje velikost paměti požadované v bytech (tj. Počet sousedních paměťových míst, která mají být přidělena).

Ale jak bylo zmíněno dříve, funkce malloc vrací ukazatel neplatnosti, takže operátor obsazení je povinen změnit typ vráceného ukazatele na základě naší potřeby, výše uvedené prohlášení může být prezentováno v následujícím tvaru:

ptr_var=(type_cast* ) malloc (size)

Kde ptr_var je název ukazatele, který zachovává počáteční adresu přiděleného paměťového bloku, type_cast je datový typ, do kterého má být vrácený ukazatel (nebo typ void) transformován, a velikost popisuje velikost přiděleného bloku paměti v bytech .

Například:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Paměť přidělená funkcí malloc obsahuje hodnotu smetí .

Všimněte si, že ověřit, zda odpovídající požadavek je generován malloc přidělit paměť udělenou systémovou RAM, nebo odmítnut (v případě, pokud není k dispozici požadovaný prostor). Můžeme využít vlastnosti, ve které není potřebnému množství paměti přiřazena funkce malloc, která vrací hodnotu NULL.

Definice calloc ()

Funkce calloc pracuje přesně stejně jako funkce malloc, s výjimkou skutečnosti, že vyžaduje dva argumenty, jako v případě malloc () je potřeba pouze jeden argument.

Například:
int*ptr;
ptr = (int*)calloc(10, 2);

Zde 2 určuje velikost datového typu v bajtu, pro který chceme provést alokaci, což je v tomto případě 2 pro celá čísla. A 10 označuje počet prvků, pro které má být přiděleno.

Nezapomeňte, že argument předaný funkci malloc byl (n * 10), jedná se o jediný argument, který nelze zaměňovat, protože více argumentů je vždy odděleno čárkami. Argument (n * 10) nemá mezi sebou žádné čárky. Je to tedy jediný argument, i když ne jednoduchý, ale výraz.

Vrátíme-li se k výše uvedenému prohlášení, po provedení výše uvedeného výpisu je do žádajícího programu přiřazen paměťový blok o 20 bajtech a adresa prvního bloku je přiřazena dožadujícímu programu a adresa prvního bloku je přiřazena k ukazateli. ptr.

Paměť přidělená funkcí calloc drží všechny nuly. Funkce calloc je také dostupná v souboru záhlaví nebo v TURBO C.

Rozdíly mezi malloc a calloc

Primární rozdíly mezi malloc a calloc funkcemi jsou:

  1. Jeden blok požadované paměti je přiřazen v malloc, zatímco více bloků požadované paměti jsou přiděleny calloc.
  2. Funkce malloc nevymaže a inicializuje přidělenou paměť. Obsahuje hodnotu smetí a položku přidělené paměti nelze měnit. Naproti tomu calloc inicializuje přidělenou paměť na nulu.
  3. malloc je rychlejší než calloc kvůli požadavku dalších kroků inicializace v calloc, ale rozdíl je zanedbatelný.
  4. Další rozdíl mezi těmito dvěma je, že calloc je malloc + memset, memset přiděluje fyzické stránky v paměti, zatímco malloc přiřazuje paměť pouze z haldy ve virtuální adrese.

Závěr:

Malloc a calloc funkce jsou používány pro přidělení paměti a mají určitou výhodu a nevýhoda jako malloc je rychlá ve srovnání s calloc. Navíc malloc jednodušší použití, protože trvá pouze jeden argument, protože calloc přiděluje paměť a inicializovat paměťovou oblast pomocí ZERO. Ale raději používáte calloc, když je pro vás důležitější inicializace proměnné .

Top