Doporučená, 2022

Redakce Choice

Rozdíl mezi novým a malloc ()

Obě nové a malloc () se používají k dynamickému přidělení paměti. Ačkoli, nový a malloc () být různý v mnoha kontextech. Primární rozdíl mezi novým a malloc () je ten, že nový je operátor, použitý jako konstrukt. Na druhou stranu, malloc () je standardní knihovní funkce, která se používá k přidělení paměti za běhu. Ostatní rozdíly mezi nimi jsou popsány níže ve srovnávací tabulce:

Srovnávací graf

Základ pro porovnáníNovýmalloc ()
JazykNový operátor je specifická vlastnost 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 asit přidělit dostatek paměti pro konkrétní typmalloc vyžaduje, aby operátor sizeof věděl, jakou velikost paměti musí přidělit.
KonstruktorNový operátor může zavolat konstruktoru objektu.malloc () nemůže vůbec zavolat konstruktoru.
InicializaceNový operátor by mohl inicializovat objekt při přidělení paměti.Inicializace paměti nemohla být provedena v malloc.
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 poruše vyvolá operátor nové výjimky.Při selhání vrátí malloc () hodnotu NULL.
VyloučeníPřidělení paměti novými, uvolněnými pomocí "smazat".Přidělení paměti malloc () je uvolněno pomocí funkce free ().
PřemístěníNový operátor nepřiděluje paměť.Paměť přidělenou malloc () může být realokována pomocí realloc ().
ProvedeníNový operátor zkracuje dobu provedení.Malloc () vyžaduje více času na provedení.

Definice nového

Nový operátor je operátor přidělení paměti, který přiděluje paměť dynamicky. Nový operátor přiděluje paměť v haldě a vrací počáteční adresu této paměti, která je přiřazena k referenční proměnné. Nový operátor je podobný malloc () v C. Nicméně, C ++ kompilátor je kompatibilní s malloc () ale, to je nejlepší používat nový operátor jak to má jisté výhody přes malloc (). Syntaxe nového operátora je následující:

 type variable_name = nový typ (parameter_list); 

Zde „typ“ označuje datový typ proměnné, pro kterou má být paměť přidělena. Slovo „variable_name“ je jméno dané referenční proměnné, která drží ukazatel na paměť. V závorkách jsou uvedena volání konstruktoru. Parametr_list je seznam hodnot, které jsou předá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. Proto nevyžaduje operátora sizeof () ani nevyžaduje změnu velikosti paměti jako malloc (), která používá realloc () k přerozdělení paměti. Nový operátor je konstrukt; zavolá konstruktor objektu, zatímco deklarace, která se obecně používá k inicializaci objektu.

Víme, že nový operátor přiděluje paměť v haldě a velikost haldy je omezená. Pokud je tedy halda mimo paměť a nový operátor se pokusí přidělit paměť, povede to k selhání nového operátora. Pokud se novému operátorovi nepodaří přidělit paměť, bude vyvolána výjimka a pokud váš kód nebude schopen tuto výjimku zpracovat, program se ukončí abnormálně.

Paměť přidělená operátorem může být uvolněna pomocí operátoru mazání. Nový operátor ukončí dobu provádění, protože se jedná o operátora, nikoli funkci.

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, typu cast, aby se ukazatel dostal do paměti určeného typu, a tento ukazatel na paměť je přiřazen k referenční proměnné. Funkce malloc () je podobná funkci nového operátora v C ++, protože se používá k dynamickému přidělení paměti. Malloc () je standardní funkce knihovny. Syntaxe funkce malloc () je následující:

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

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

Malloc () vyžaduje odlitek typu, protože ukazatel vrácený malloc () je typu void, takže pro přiřazení typu k ukazateli je vyžadováno odlití typu. Sizeof () je vyžadován, protože funkce malloc () přiděluje syrovou paměť, proto je nutné, aby funkce malloc () sdělila, jakou velikost paměti má přidělit. Pokud přidělená paměť není dostatečná, může být změněna nebo přerozdělena pomocí realloc ().

Funkce malloc () přiděluje paměť na haldě. V případě, že halda je mimo paměť, vrátí funkce malloc () ukazatel NULL. Proto by měla být referenční proměnná obsahující ukazatel vrácený malloc () zkontrolována předtím, než bude použita, jinak může mít za následek selhání systému.

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

Klíčové rozdíly mezi novými a malloc ()

  1. Nový operátor je konstrukce zavedená v jazyce C ++ a používaná v jazyce Java, C #, atd. Na druhou stranu je malloc () standardní knihovní funkcí, která se nachází pouze v jazyce C a je podporována 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 () nechal funkci vědět, jakou velikost paměti má přidělit.
  3. Nový operátor může při deklaraci zavolat konstruktor objektu. Na druhé straně, funkce malloc () nemůže volat konstruktor.
  4. Operátor 'nový' může být přetížen, ale malloc () nemohl.
  5. Pokud se novému operátorovi nepodaří přidělit paměť, vyvolá výjimku, kterou musí zpracovat kód, jinak program ukončí. Na druhé straně funkce malloc () vrátí ukazatel NULL, pokud se nepodaří přidělit paměť. Pokud je ukazatel použit bez kontroly, bude to mít za následek selhání systému.
  6. Paměť přidělená novým operátorem může být uvolněna pomocí 'delete'. 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 v žádném případě změnit. Na druhé straně lze paměť přidělenou pomocí funkce malloc () relokovat (změnit velikost) pomocí funkce realloc ().
  8. Doba 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ělení paměti. V současné době se nový operátor používá k přidělení paměti za běhu, protože má určité výhody oproti malloc ().

Top