Rekommenderas, 2024

Redaktionen

Skillnad mellan nya och malloc ()

De nya och malloc () båda används för att dynamiskt allokera minnet. Även om nya och malloc () är olika i många sammanhang. Den primära skillnaden mellan ny och malloc () är den nya är operatören, som används som en konstruktion. Å andra sidan är malloc () en standardbiblioteksfunktion som används för att allokera minnet vid körning. De andra skillnaderna mellan dem diskuteras nedan i jämförelsetabellen:

Jämförelsediagram

Grunder för jämförelsenymalloc ()
SpråkOperatören ny är en särskild egenskap hos C ++, Java och C #.Funktionen malloc () är en egenskap av C.
Natur"ny" är en operatör.malloc () är en funktion.
storlek av( )ny behöver inte storleken på operatören, vilket ger tillräckligt med minne för en specifik typmalloc kräver storleken på operatören att veta vilken minnesstorlek den måste tilldela.
KonstruktörOperatörens nya kan ringa konstruktören till ett objekt.malloc () kan alls inte ringa till en konstruktör.
initieringOperatören ny kan initiera ett objekt samtidigt som det tilldelas minne.Minnesinitialisering kunde inte göras i malloc.
överbelastningOperatörens nya kan överbelastas.Malloc () kan aldrig vara överbelastad.
FelVid misslyckande kastar operatören ett undantag.Vid misslyckande returnerar malloc () en NULL.
avallokeringMinnesallokeringen genom ny, allokerad med "radera".Minnesallokeringen av malloc () fördelas med en fri () -funktion.
omfördelningDen nya operatören omfördelar inte minnet.Minnet som tilldelats av malloc () kan omfördelas med realloc ().
AvrättningOperatören ny slicker körtiden.Malloc () kräver mer tid för körning.

Definition av nytt

Operatören ny är en minnesallokeringsoperatör som allokerar minne dynamiskt. Den nya operatören allokerar 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 ++-kompilatorn är kompatibel med malloc () men det är bäst att använda ny operatör eftersom det har vissa fördelar jämfört med malloc (). Ny operatörs syntax är följande:

 skriv variable_name = ny typ (parameter_list); 

Här anger "typ" datatypen för variabeln för vilken minnet måste allokeras. Ordet "variable_name" är namnet som ges till referensvariabeln som håller pekaren till minne. Parentesen anger här konstruktörens uppringning. Parameterlistan är listan över värden som skickas till konstruktören för att initiera det nybyggda objektet.

Den nya operatören tilldelar tillräckligt med minne för ett objekt av en viss typ. Därför behöver det inte en sizeof () operatör eller behöver det för att ändra storlek på minnet som malloc () som använder realloc () för att omfördela minnet. Den nya operatören är en konstruktion; det kallar konstruktören för ett objekt under deklarationen som vanligtvis används för att initiera objektet.

Vi vet att den nya operatören allokerar minnet i högen och höjden är begränsad. Så, om hopen är tomt och nya operatör försöker att allokera minnet, leder det till att den nya operatören misslyckas. Om den nya operatören misslyckas med att ange minnet kommer det att bli ett undantag, och om din kod inte klarar av det här undantaget, avslutas programmet onormalt.

Minnet som tilldelats av operatören kan frigöras med hjälp av raderingsoperatören. Den nya operatören avbryter körtiden som en operatör, inte en funktion.

Definition av malloc ()

Malloc () är en funktion som används för att allokera den begärda mängden minne på högen. Metoden returnerar pekaren av "void" -typ som vidare är typ av gjutning för att få en pekare till ett minne av en specificerad typ och denna pekare till minnet är tilldelad en referensvariabel. Funktionen malloc () liknar den nya operatören i C ++ eftersom den används för att allokera minnet dynamiskt. Malloc () är en standardbiblioteksfunktion. Synkroniseringen av funktionen malloc () är som följer:

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

Här anger "typ" datatypen för variabeln för vilket minne måste tilldelas. Variabelnamnet är namnet på referensvariabeln som pekaren returneras av malloc () kommer att tilldelas. (Typ *) beskriver typgjutningen för att få en pekare till minnet i en viss typ. Sizeof () beskriver malloc (), som 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 av () krävs eftersom funktionen malloc () allokerar ett råminne, det är därför nödvändigt att berätta för malloc () -funktionen vilken minnesstorlek den måste allokera. Om det tilldelade minnet inte är tillräckligt kan det ändras eller omfördelas med realloc ().

Funktionen malloc () fördelar minne på högen. Om så är fallet, är hällan av minnet, då returnerar funktionen malloc () en NULL-pekare. Därför bör referensvariabeln som innehåller pekaren returneras av malloc (), kontrolleras innan den används, annars kan det leda till en systemkrasch.

Minnet som tilldelas av funktionen malloc () fördelas med fri (). Eftersom funktionssamtal leder till en overhead kräver malloc () mer tid för körning.

Viktiga skillnader mellan nya och malloc ()

  1. Den nya operatören är en konstruktion som introduceras 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 allokerar tillräckligt med minne för objektet av en specificerad typ, så det behöver inte sorteringsoperatören. Å andra sidan kräver funktionen malloc () funktionen sizeof () för att låta funktionen veta vilken minnesstorlek den ska tilldela.
  3. Den nya operatören kan ringa objektets konstruktör under deklarationen. Å andra sidan kan malloc () -funktionen inte ringa konstruktorn.
  4. Operatören "ny" kan vara överbelastad men malloc () kunde inte.
  5. Om den nya operatören misslyckas med att allokera minnet, kastar det ett undantag som måste hanteras av koden, annars kommer programmet att avslutas. Å andra sidan returnerar funktionen malloc () en NULL-pekare om den misslyckas med att allokera minnet. Om pekaren används utan att kontrollera detta kommer det att leda till en systemkrasch.
  6. Minnet som tilldelats med en ny operatör kan fördelas med "radera". Å andra sidan kan minnet allokerat med malloc () -funktionen fördelas med fri ().
  7. När minnet är allokerat med en ny operatör kan den ändå inte ändras. Å andra sidan kan minnet allokerat med hjälp av malloc () -funktionen omfördelas (storlek) med realloc () -funktionen.
  8. Utförandetiden för ny är mindre jämfört med malloc () eftersom malloc är en funktion och ny är en konstruktion.

Slutsats:

Funktionen malloc () är den gamla sättet att dynamiskt allokera minnet. Numera används den nya operatören för att allokera minnet vid körning eftersom det har vissa fördelar jämfört med malloc ().

Top