Skillnaden mellan ny och malloc ()

Författare: Laura McKinney
Skapelsedatum: 1 April 2021
Uppdatera Datum: 5 Maj 2024
Anonim
Section, Week 5
Video: Section, Week 5

Innehåll


Den nya och malloc () båda används för att dynamiskt fördela minnet. Men nya och malloc () skiljer sig åt i många nackdelar. Den primära skillnaden mellan ny och malloc () är den ny är operatören, används som en konstruktion. Å andra sidan malloc () är en standardbiblioteksfunktion som används för att fördela minne vid körning. De andra skillnaderna mellan dem diskuteras nedan i jämförelsetabellen:

  1. Jämförelsediagram
  2. Definition
  3. Viktiga skillnader
  4. Slutsats

Jämförelsediagram

Grund för jämförelsenymalloc ()
SpråkOperatören nya är en specifik funktion i C ++, Java och C #. Funktionen malloc () är en funktion av C.
Natur"ny" är en operatör.malloc () är en funktion.
storlek av( )nya behöver inte storleken på operatören eftersom det har tillräckligt med minne för specifik typ malloc kräver operatörens storlek att veta vilken minnesstorlek den har att tilldela.
Konstruktör Operatören ny kan ringa konstruktören av ett objekt.malloc () kan inte alls ringa en konstruktör.
initieringOperatörens nya kan initialisera ett objekt medan det tilldelas minne.Initiering av minne kunde inte göras i malloc.
överbelastning Operatörens nya kan överbelastas.Malloc () kan aldrig överbelastas.
FelVid misslyckande kastar operatörens nya undantag.Vid misslyckande returnerar malloc () en NULL.
avallokeringMinneallokering med ny, omlokaliserad med "radera".Minnen allokering med malloc () fördelas med en fri () -funktion.
omfördelningDen nya operatören omfördelar inte minnet.Minne tilldelat av malloc () kan omfördelas med hjälp av realloc ().
AvrättningOperatören ny avbryter körningstiden.Malloc () kräver mer tid för körning.


Definition av ny

Operatören ny är en minnesallokeringsoperatör som tilldelar minne dynamiskt. Den nya operatören tilldelar minne i högen och returnerar startadressen för det minnet som tilldelas en referensvariabel. Den nya operatören liknar malloc () i C. Men C ++ -kompileraren är kompatibel med malloc () men det är bäst att använda ny operatör eftersom den har vissa fördelar jämfört med malloc (). Syntaxen för den nya operatören är som följer:

typ variable_name = ny typ (parameter_list);

Här anger "typ" datatypen för den variabel som minnet måste allokeras för. Ordet "variabelnamn" är namnet som ges till referensvariabeln som håller pekaren i minnet. Parentesen här anger anrop av konstruktören. Parameterlistan är listan över värden som skickas till konstruktören för att initiera det nyligen konstruerade objektet.


Den nya operatören tilldelar tillräckligt med minne som krävs för ett objekt av en specifik typ. Därför kräver det inte en sizeof () -operatör och behöver inte heller ändra storlek på minnet som malloc () som använder reallokering () för att omfördela minnet. Den nya operatören är en konstruktion; det kallar konstruktören för ett objekt medan deklaration som vanligtvis används för att initialisera objektet.

Vi vet att den nya operatören allokerar minnet i högen och storleken på högen är begränsad. Så om högen är slut i minnet och den nya operatören försöker tilldela minnet kommer det att leda till att den nya operatören misslyckas. Om den nya operatören inte tilldelar minnet kommer den att kasta ett undantag, och om din kod inte kan hantera detta undantag avslutas programmet onormalt.

Det minne som tilldelats av operatören nytt kan frigöras med raderaoperatören. Den nya operatören stänger av körningstiden eftersom den är en operatör, inte en funktion.

Definition av malloc ()

De malloc () är en funktion som används för att fördela den begärda mängden minne på högen. Metoden returnerar pekaren av "ogiltig" typ som är längre, typ cast för att få en pekare till ett minne av en specificerad typ och denna pekare till minne tilldelas en referensvariabel. Malloc () -funktionen liknar den nya operatören i C ++ eftersom den används för att allokera minne dynamiskt. Malloc () är en standardbiblioteksfunktion. Syntaxen för malloc () -funktionen är som följer:

typ variabelnamn = (typ *) malloc (storlek av (typ));

Här indikerar "typ" datatypen för den variabel som minnet måste tilldelas för. Variabelnamnet är namnet på referensvariabeln till vilken pekaren som returneras av malloc () kommer att tilldelas. (Typ *) beskriver typgjutning för att få en pekare till minnet i en specifik typ. Storlekenof () beskriver malloc (), vilken minnesstorlek som krävs.

Malloc () kräver typgjutning eftersom pekaren som returneras av malloc () är av tomtyp, så för att tilldela en typ till pekaren krävs typgjutning. Storleken på () krävs eftersom funktionen malloc () allokerar ett rått minne, varför det krävs att berätta för malloc () -funktionen att vilken minnesstorlek den måste tilldela. Om det tilldelade minnet inte är tillräckligt kan det ändras storlek eller omfördelas med hjälp av realloc ().

Funktionen malloc () fördelar minne på högen. I händelse av att högen inte är i minnet då returnerar malloc () -funktionen en NULL-pekare. Följaktligen bör referensvariabeln som innehåller pekaren som returneras av malloc () kontrolleras innan den används, annars kan det leda till en systemkrasch.

Det minne som tilldelats av malloc () -funktionen fördelas med hjälp av gratis (). Eftersom funktionssamtal leder till en overhead kräver malloc () mer tid för körning.

  1. Den nya operatören är en konstruktion introducerad i C ++ och används i Java, C #, etc. Å andra sidan är malloc () en standardbiblioteksfunktion som endast finns på C-språk och stöds av C ++.
  2. Den nya operatören tilldelar tillräckligt med minne för objektet av en specifik typ, så det kräver inte storleksoperatör. Å andra sidan kräver malloc () -funktionen operatören sizeof () för att låta funktionen veta vilken minnesstorlek den måste tilldela.
  3. Den nya operatören kan ringa objektets konstruktör medan deklarationen. Å andra sidan kan malloc () -funktionen inte ringa konstruktören.
  4. Operatören "ny" kan vara överbelastad men malloc () kunde inte.
  5. Om den nya operatören inte tilldelar minnet, kastar det ett undantag som måste hanteras med koden annars kommer programmet att avsluta. Å andra sidan returnerar malloc () -funktionen en NULL-pekare om den inte lyckas tilldela minne. Om pekaren används utan att kontrollera detta kommer det att leda till en systemkrasch.
  6. Det minne som tilldelats med en ny operatör kan delas om med 'radera'. Å andra sidan kan minnet som tilldelats med malloc () -funktion fördelas med hjälp av gratis ().
  7. När minnet har allokerats med en ny operatör kan det ändå ändras i storlek. Å andra sidan kan minnet som tilldelas med malloc () -funktion omfördelas (ändra storlek) med realloc () -funktion.
  8. Exekveringstiden för ny är mindre jämfört med malloc () eftersom malloc är en funktion och ny är en konstruktion.

Slutsats:

Malloc () -funktionen är det gamla sättet att dynamiskt fördela minnet. Nuförtiden används den nya operatören för att fördela minnet vid körning eftersom det har vissa fördelar jämfört med malloc ().