Rozdíl mezi novými a malloc ()

Autor: Laura McKinney
Datum Vytvoření: 1 Duben 2021
Datum Aktualizace: 5 Smět 2024
Anonim
Rozdíl mezi novými a malloc () - Technologie
Rozdíl mezi novými a malloc () - Technologie

Obsah


Nové i malloc () se používají k dynamickému přidělování paměti. Ačkoli nové a malloc () se v mnoha nevýhodách liší. Primární rozdíl mezi novým a malloc () je ten Nový je operátor, používaný jako konstrukce. Na druhé straně, malloc () je standardní funkce knihovny, která se používá k přidělování paměti za běhu. Další rozdíly mezi nimi jsou diskutovány níže v srovnávací tabulce:

  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Závěr

Srovnávací tabulka

Základ pro srovnáníNovýmalloc ()
JazykNovým operátorem je specifická funkce C ++, Java a C #. Funkce malloc () je funkcí C.
Příroda„nový“ je operátor.malloc () je funkce.
velikost( )nový nepotřebuje velikost operátora, protože přiděluje dostatek paměti pro konkrétní typ Malloc vyžaduje, aby operátor velikosti věděl, jakou velikost paměti musí přidělit.
Konstruktor Operátor new může volat konstruktor objektu.malloc () nemůže vůbec zavolat konstruktoru.
InicializaceNový operátor mohl inicializovat objekt a přiřadit mu paměť.Inicializaci paměti nelze provést v malloku.
Přetížení Nový operátor může být přetížen.Malloc () nemůže být nikdy přetížen.
SelháníPři selhání vyvolá operátor výjimku.Při selhání vrátí malloc () NULL.
DeallocationPřidělení paměti novým, přiděleno pomocí "smazat".Přidělení paměti malloc () je přiděleno pomocí funkce free ().
PřerozděleníNový operátor nepřiděluje paměť.Paměť přidělená malloc () může být znovu přidělena pomocí realloc ().
ProvedeníOperátor nový zkracuje dobu provádění.Malloc () vyžaduje více času na provedení.


Definice nového

Operátor Nový je operátor přidělování paměti, který dynamicky přiděluje paměť. Nový operátor přiděluje paměť v haldě a vrací počáteční adresu této paměti, která je přiřazena referenční proměnné. Nový operátor je podobný malloc () v C. Kompilátor C ++ je však kompatibilní s malloc (), ale je nejlepší použít nového operátora, protože má oproti malloc () určité výhody. Syntaxe nového operátora je následující:

type název_ proměnné = nový typ (seznam parametrů);

Zde „typ“ označuje datový typ proměnné, pro kterou musí být paměť přidělena. Slovo „název_ proměnné“ je název přiřazený referenční proměnné, která drží ukazatel paměti. Závorka zde specifikuje volání konstruktoru. Parametr_list je seznam hodnot, které jsou předávány konstruktoru k inicializaci nově vytvořeného objektu.


Nový operátor přiděluje dostatek paměti potřebné pro objekt určitého typu. Nevyžaduje tedy operátora sizeof () ani nevyžaduje změnu velikosti paměti jako malloc (), která k realokaci paměti používá realloc (). Nový operátor je konstrukt; volá deklarátor objektu při deklaraci, která se obvykle používá k inicializaci objektu.

Víme, že nový operátor přiděluje paměť v haldě a velikost haldy je omezená. Pokud tedy halda není v paměti a nový operátor se pokusí o přidělení paměti, povede to k selhání nového operátora. Pokud nový operátor nedokáže přidělit paměť, vyvolá výjimku a pokud váš kód tuto výjimku nedokáže zpracovat, program se neobvykle ukončí.

Paměť přidělená novým operátorem může být uvolněna pomocí operátoru odstranění. Nový operátor zkracuje dobu provádění, protože je to operátor, nikoli funkce.

Definice malloc ()

malloc () je funkce, která se používá k přidělení požadovaného množství paměti na haldě. Metoda vrací ukazatel typu „void“, který je dále, zadejte cast, aby se ukazatel dostal do paměti určitého typu a tento ukazatel na paměť je přiřazen referenční proměnné. Funkce malloc () je podobná novému operátorovi v C ++, protože se používá k dynamickému přidělování paměti. Malloc () je standardní funkce knihovny. Syntaxe funkce malloc () je následující:

type variable_name = (type *) malloc (sizeof (type));

Zde „typ“ označuje datový typ proměnné, pro kterou musí být přidělena paměť. Název proměnné je název referenční proměnné, ke které bude přiřazen ukazatel vrácený malloc (). (Typ *) popisuje obsazení typu pro získání ukazatele na paměť v konkrétním typu. Sizeof () popisuje malloc (), že jaká velikost paměti je vyžadována.

Malloc () vyžaduje odlévání typu, protože ukazatel vrácený malloc () má neplatný typ, takže k přiřazení typu k ukazateli je vyžadováno odlévání typu. Sizeof () je vyžadován, protože funkce malloc () přiděluje nezpracovanou paměť, a proto je třeba funkci malloc () sdělit, jakou velikost paměti musí přidělit. Pokud alokovaná paměť není dostatečná, lze ji změnit nebo přerozdělit pomocí realloc ().

Funkce malloc () přiděluje paměť na haldě. V případě, že je halda nedostatek paměti, funkce malloc () vrací ukazatel NULL. Referenční proměnná obsahující ukazatel vrácený malloc () by proto měla být zkontrolována před použitím, jinak může vést k selhání systému.

Paměť přidělená funkcí malloc () je uvolněna pomocí free (). Protože volání funkce vede k režii, malloc () vyžaduje více času na provedení.

  1. Nový operátor je konstrukt zavedený v C ++ a používaný v Javě, C # atd. Na druhé straně malloc () je standardní knihovní funkce nalezená pouze v jazyce C a podporovaná C ++.
  2. Nový operátor přiděluje dostatek paměti pro objekt zadaného typu, takže nevyžaduje operátora velikosti. Na druhé straně funkce malloc () vyžaduje, aby operátor sizeof () oznámil funkci, jakou velikost paměti musí přidělit.
  3. Nový operátor může během deklarace volat konstruktor objektu. Na druhé straně funkce malloc () nemůže volat konstruktor.
  4. Operátor „nový“ by mohl být přetížen, ale malloc () nemohl.
  5. Pokud nový operátor nepřiřadí paměť, vyvolá výjimku, která musí být zpracována kódem, jinak program skončí. Na druhou stranu funkce malloc () vrací ukazatel NULL, pokud selže alokovat paměť. Pokud je ukazatel použit bez kontroly, bude to mít za následek selhání systému.
  6. Paměť přidělená pomocí nového operátora může být přidělena pomocí 'smazat'. Na druhou stranu paměť přidělená pomocí funkce malloc () může být uvolněna pomocí free ().
  7. Jakmile je paměť přidělena pomocí nového operátora, nelze ji přesto změnit. Na druhou stranu paměť přidělená pomocí funkce malloc () může být znovu přidělena (změněna velikost) pomocí funkce realloc ().
  8. Čas provedení nového je menší ve srovnání s malloc (), protože malloc je funkce a nový je konstrukt.

Závěr:

Funkce malloc () je starý způsob dynamického přidělování paměti. V současné době se nový operátor používá k alokaci paměti za běhu, protože má oproti malloc () určité výhody.