základní rozdíl mezi malloc a calloc je funkce, že calloc() potřebuje dva argumenty místo jednoho argumentu, který je nutné pomocí malloc(). Oba malloc () a calloc () jsou funkce, které programovací jazyk C poskytuje pro dynamickou alokaci paměti a de-alokaci v době běhu.
předtím, Než pochopení malloc() a calloc() funkce nejprve dovolte nám pochopit význam dynamického přidělování paměti. Alokace paměti je postup přiřazení paměti počítače k provádění programů a procesů. Používáme dynamické alokační techniky, pokud není předem známo, kolik místa v paměti je potřeba pro program a proces.
dynamická alokace paměti vzniká v důsledku problémů spojených se statickou alokací paměti, například pokud je uloženo méně prvků, pak je zbytek paměti zbytečně zbytečný. Proto překonává problémy statické alokace paměti, kde je paměť přidělena pouze v případě potřeby.
obsah: malloc() Vs calloc()
- pro Porovnání programů
- Definice
- Klíčové Rozdíly
- Závěr
Srovnání Graf
Základě srovnání | malloc() | calloc() |
---|---|---|
bloků | Přiřadí jeden blok požadoval paměti. | přiřadí více bloků požadované paměti. |
syntaxe | void * malloc (velikost size_t); | void * calloc(velikost size_t, velikost size_t); |
inicializace | malloc () nevymaže a inicializuje přidělenou paměť. | přidělená paměť je inicializována na nulu pomocí calloc (). |
způsob alokace | malloc () funkce přiděluje paměť velikosti ‚size‘ z haldy. | funkce calloc() přiděluje paměť, jejíž velikost se rovná velikosti num*. |
Rychlost | rychle | poměrně pomalu. |
Definice malloc()
funkce malloc přiděluje blok paměti v bajtech. Uživatel by měl explicitně dát velikost bloku, to vyžaduje pro použití.
Přes malloc funkce programu požadavky RAM pro systém pro přidělování paměti, je-li žádost připustil (tj. funkce malloc říká úspěšný v přidělování paměti), vrací ukazatel na první blok paměti. Vrací neplatný typ ukazatele, což znamená, že lze přiřadit jakýkoli typ ukazatele.
i když vrátí NULL, pokud funkce malloc nejsou schopny přidělit požadované množství paměti. Ten malloc funkce je přístupná v TURBO C, záhlaví souboru alloc.h
nebo stdlib.h
, a na UNIXU to bude k dispozici v záhlaví souboru <malloc.h>
.
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))
Kde velikost představuje velikost paměti potřebné v bajtech(tj., počet přilehlých paměťových míst, která mají být přidělena).
Ale jak již bylo zmíněno dříve, že funkce malloc vrací neplatný ukazatel, tedy obsazení provozovatel je povinen změnit vrátil typu ukazatel vychází z naší potřeby, výše uvedené prohlášení by mohly být prezentovány v následující podobě:
ptr_var=(type_cast* ) malloc (size)
Kde ptr_var
je název ukazatel, který zachovává výchozí adresu přidělené paměti bloku, type_cast
je datový typ, do které se vrátil ukazatel (nebo typ void), které mají být transformovány, a velikost popisuje velikost přidělené paměti bloku v bajtech.
například:int *ptr;
ptr=(int*) malloc (10 * size of (int));
paměť přidělená funkcí malloc obsahuje hodnotu odpadu.
Všimněte si, že pro ověření, že v případě, že odpovídající požadavek je generován malloc přidělit paměť udělené systémové paměti RAM, nebo zamítnuta(v případě, že požadované místo není k dispozici). Můžeme využít vlastnost, ve které není přiřazeno potřebné množství paměti funkce malloc vrací NULL.
Definice calloc()
calloc funkce funguje přesně stejně jako funkce malloc kromě skutečnosti, že to vyžaduje dva argumenty, jako v případě malloc() pouze jeden argument je zapotřebí.
například:int*ptr;
ptr = (int*)calloc(10,2);
2 určuje velikost datového typu v byte, pro které chceme, aby rozdělení, která je v tomto případě 2 na celá čísla. A 10 označuje počet prvků, pro které má být přiděleno.
Pamatujte si, že argument předaný funkci malloc (n*10), to je jediný argument, nebuď zmatená, protože více argumenty jsou vždy odděleny čárkami. Argument (n * 10) nemá mezi sebou žádné čárky. Proto je to jediný argument, i když ne jednoduchý, ale výraz.
Návrat na výše uvedené prohlášení, a to po provedení výše uvedené prohlášení bloku paměti pro 20 bytů je přiděleno žádající programu a adresu první blok je přidělen žádající programu, a adresu prvního bloku je přiřazen ukazatel ptr.
paměť přidělená funkcí calloc drží všechny nuly. Do funkce calloc je také možné získat v záhlaví souboru <stdlib.h>
nebo <alloc.h>
v TURBO C.
Klíčové Rozdíly Mezi malloc a calloc
primární rozdíly mezi malloc a calloc funkce jsou:
- jeden blok z požadoval paměti je přiřazena v malloc, zatímco více bloků požadované paměti jsou přidělené calloc.
- funkce malloc nevymaže a inicializuje přidělenou paměť. Obsahuje hodnotu odpadků a položku přidělené paměti nelze změnit. Naproti tomu calloc inicializuje přidělenou paměť na nulu.
- malloc je rychlejší než calloc kvůli požadavku na dodatečné kroky inicializace v calloc, ale rozdíl je zanedbatelný.
- Další rozdíl mezi těmito dvěma je, že calloc je malloc+memset, memset přiděluje fyzické stránky v paměti vzhledem k tomu, že malloc pouze přiděluje paměť z haldy ve virtuální adresu.
Závěr
Oba malloc a calloc funkce se používá pro přidělování paměti a mají své určité výhody i nevýhody, jako malloc je rychle ve srovnání s calloc. Kromě toho, malloc snadnější použití, protože to trvá jen jeden argument, protože calloc přiděluje paměť a inicializovat paměťovou oblast s nulou. Ale raději byste použili calloc, když je pro vás důležitější inicializace proměnné.