Anbefalet, 2021

Redaktørens Valg

Forskel mellem new and malloc ()

De nye og malloc () begge bruges til dynamisk tildeling af hukommelsen. Selvom nye og malloc () er forskellige i mange sammenhænge. Den primære forskel mellem new og malloc () er, at den nye er operatøren, der bruges som en konstruktion. På den anden side er malloc () en standardbiblioteksfunktion, der bruges til at allokere hukommelse ved driftstid. De øvrige forskelle mellem dem er diskuteret nedenfor i sammenligningstabellen:

Sammenligningstabel

Grundlag for sammenligningnymalloc ()
SprogOperatørens nye er et specifikt træk ved C ++, Java og C #.Funktionen malloc () er en funktion af C.
Natur"ny" er en operatør.malloc () er en funktion.
sizeof ()Ny behøver ikke størrelsen af ​​operatøren, så den giver tilstrækkelig hukommelse til den specifikke typemalloc kræver størrelsen af ​​operatøren at vide, hvilken hukommelsesstørrelse den skal tildele.
ConstructorOperatør ny kan kalde konstruktøren af ​​en genstand.malloc () kan slet ikke ringe til en konstruktør.
InitialiseringOperatørens nye kunne initialisere et objekt, mens der blev tildelt hukommelse til det.Hukommelsesinitialisering kunne ikke gøres i malloc.
overbelastningOperatør ny kan overbelastes.Malloc () kan aldrig overbelastes.
FiaskoVed svigt kaster operatør ny en undtagelse.Ved fejl, returnerer malloc () en NULL.
deallokeringHukommelsesallokering for ny, fordelt ved hjælp af "slet".Hukommelsesallokeringen ved malloc () fordeles ved hjælp af en gratis () funktion.
omfordelingDen nye operatør omfordeler ikke hukommelsen.Hukommelse tildelt af malloc () kan omfordeles ved hjælp af realloc ().
UdførelseOperatøren ny skærer udførelsestiden.Malloc () kræver mere tid til udførelse.

Definition af nyt

Operatøren ny er en hukommelsesallokeringsoperatør, som tildeler hukommelsen dynamisk. Den nye operatør tildeler hukommelse i bunken og returnerer startadressen til den hukommelse, der er tildelt en referencevariabel. Den nye operatør ligner malloc () i C. Men C ++ compiler er kompatibel med malloc (), men det er bedst at bruge ny operatør, da det har visse fordele i forhold til malloc (). Syntaxen for den nye operatør er som følger:

 skriv variable_name = ny type (parameter_list); 

Her angiver "type" datatypen af ​​variablen, som hukommelsen skal tildeles til. Ordet "variable_name" er navnet angivet til referencevariablen, som holder markøren til hukommelsen. Parentesen her angiver konstruktørens kald. Parameterlisten er listen over de værdier, der sendes til konstruktøren for at initialisere det nybyggede objekt.

Den nye operatør tildeler tilstrækkelig hukommelse til et objekt af en bestemt type. Derfor kræver det ikke en sizeof () operatør eller kræver det at ændre størrelsen på hukommelsen som malloc (), der bruger realloc () til at omfordele hukommelsen. Den nye operatør er en konstruktion; det kalder konstruktøren af ​​et objekt under en erklæring, som generelt bruges til at initialisere objektet.

Vi ved, at den nye operatør tildeler hukommelsen i bunken, og størrelsen af ​​bunken er begrænset. Så hvis bunken er ude af hukommelse og nye operatør forsøg på at allokere hukommelsen, vil det føre til svigt af den nye operatør. Hvis den nye operatør undlader at allokere hukommelsen, vil den kaste en undtagelse, og hvis din kode ikke kan klare denne undtagelse, afbryder programmet unormalt.

Hukommelsen tildelt af operatøren ny kan frigøres ved hjælp af sletteroperatøren. Den nye operatør afbryder udførelsestiden, da det er en operatør, ikke en funktion.

Definition af malloc ()

Malloc () er en funktion, der bruges til at allokere den ønskede mængde hukommelse på bunken. Metoden returnerer markøren af ​​'void'-typen, som er yderligere, skriv cast for at få en pointer til en hukommelse af en bestemt type, og denne pointer til hukommelse er tildelt en referencevariabel. Funktionen malloc () ligner den nye operatør i C ++, da den bruges til at fordele hukommelsen dynamisk. Malloc () er en standard biblioteksfunktion. Synkroniseringen af ​​malloc () -funktionen er som følger:

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

Her angiver "type" datatypen af ​​variablen, for hvilken hukommelsen skal tildeles. Variabelnavnet er navnet på referencevariablen, som pointeren returneres af malloc () vil blive tildelt. Den (type *) beskriver typen støbning for at opnå en peger til hukommelsen i en bestemt type. Størrelsen af ​​() beskriver malloc (), at hvilken hukommelsesstørrelse er påkrævet.

Malloc () kræver type støbning, fordi markøren returneres af malloc () er af ugyldigtype, så for at tildele en type til pegeren, er type støbning påkrævet. Størrelsen af ​​() er nødvendig, fordi funktionen malloc () tildeler en rå hukommelse, derfor er det nødvendigt at fortælle funktionen malloc (), hvilken hukommelsesstørrelse den skal tildele. Hvis den tildelte hukommelse ikke er tilstrækkelig, kan den ændres eller omfordeles ved hjælp af realloc ().

Funktionen malloc () tildeler hukommelsen på bunken. I tilfælde af at bunken er ude af hukommelse, returnerer funktionen malloc () en NULL-peger. Derfor bør referencevariablen, der indeholder pointer returneret af malloc (), kontrolleres før den bruges, ellers kan det medføre systemkrasj.

Hukommelsen tildelt ved malloc () -funktionen fordeles ved hjælp af gratis (). Som funktionsopkald fører til en overhead, kræver malloc () mere tid til udførelse.

Nøgleforskelle mellem nye og malloc ()

  1. Den nye operatør er en konstruktion introduceret i C ++ og bruges i Java, C # osv. På den anden side er malloc () en standardbiblioteksfunktion, der kun findes i C-sprog og understøttes af C ++.
  2. Den nye operatør tildeler tilstrækkelig hukommelse til objektet af en specificeret type, så det kræver ikke dimensionering af operatøren. På den anden side kræver funktionen malloc () funktionen sizeof () for at lade funktionen vide, hvilken hukommelsesstørrelse den skal tildele.
  3. Den nye operatør kan kalde objektets konstruktør under angivelsen. På den anden side kan malloc () -funktionen ikke kalde konstruktøren.
  4. Operatørens 'nye' kunne være overbelastet, men malloc () kunne ikke.
  5. Hvis den nye operatør undlader at allokere hukommelsen, kaster den en undtagelse, der skal håndteres af koden ellers programmet afsluttes. På den anden side returnerer funktionen malloc () en NULL-peger, hvis den undlader at allokere hukommelse. Hvis markøren bruges uden at kontrollere dette, vil det resultere i et systemkrasj.
  6. Hukommelsen tildelt ved hjælp af en ny operatør kan fordeles ved hjælp af 'slet'. På den anden side kan den hukommelse, der er tildelt ved hjælp af malloc () -funktionen, fordeles ved hjælp af gratis ().
  7. Når hukommelsen er tildelt ved hjælp af en ny operatør, kan den alligevel ikke ændres. På den anden side kan den hukommelse, der er tildelt ved hjælp af malloc () -funktionen, omfordeles (ændres) ved hjælp af realloc () -funktionen.
  8. Eksekveringstiden for ny er mindre i forhold til malloc () fordi malloc er en funktion, og ny er en konstruktion.

Konklusion:

Funktionen malloc () er den gamle måde at fordele hukommelsen dynamisk på. I dag bruges den nye operatør til at tildele hukommelsen ved kørselstidspunktet, fordi den har visse fordele i forhold til malloc ().

Top