Anbefalt, 2024

Redaksjonens

Forskjellen mellom new and malloc ()

Den nye og malloc () begge brukes til å fordele minnet dynamisk. Selv om, nye og malloc () er forskjellige i mange sammenhenger. Den primære forskjellen mellom ny og malloc () er at ny er operatøren, brukt som en konstruksjon. På den annen side er malloc () en standard biblioteksfunksjon, som brukes til å tildele minne ved kjøring. De andre forskjellene mellom dem er diskutert nedenfor i sammenligningstabellen:

Sammenligningstabell

Grunnlag for sammenligningnymalloc ()
SpråkOperatøren ny er en spesifikk egenskap av C ++, Java og C #.Funksjonen malloc () er en funksjon av C.
Natur"ny" er en operatør.malloc () er en funksjon.
størrelsen av( )ny trenger ikke størrelsen på operatøren, slik at det tildeles nok minne for bestemt typemalloc krever størrelsen på operatøren å vite hvilken minnestørrelse den skal tildele.
ConstructorOperatør ny kan ringe konstruktøren til et objekt.malloc () kan i det hele tatt ikke ringe til en konstruktør.
initialiseringOperatøren ny kunne initialisere et objekt mens du tilordnet minne til det.Minneinitialisering kan ikke gjøres i malloc.
overbelastningOperatør ny kan overbelastes.Malloc () kan aldri bli overbelastet.
FailureVed svikt, kaster operatør et nytt unntak.Ved feil, returnerer malloc () en NULL.
fradelingMinnetildelingen ved ny, deallokert ved hjelp av "slett".Minnetildelingen av malloc () er fordelt med en gratis () -funksjon.
reallokeringDen nye operatøren omfordeler ikke hukommelsen.Minne allokert av malloc () kan omfordeles ved hjelp av realloc ().
HenrettelseOperatøren ny kutter utføringstiden.Malloc () krever mer tid for utførelse.

Definisjon av nytt

Operatøren ny er en minneallokeringsoperatør som tilordner minne dynamisk. Den nye operatøren tildeler minne i bunken og returnerer startadressen til det minnet som er tilordnet en referansevariabel. Den nye operatøren ligner på malloc () i C. Men C ++-kompilatoren er kompatibel med malloc (), men det er best å bruke ny operatør, da det har visse fordeler i forhold til malloc (). Syntaxen til den nye operatøren er som følger:

 skriv variable_name = ny type (parameter_list); 

Her angir "type" datatypen til variabelen som minnet må tildeles. Ordet "variable_name" er navnet gitt til referansevariabelen som holder pekeren til minne. Parametrene her spesifiserer konstruktørens anrop. Parameterlisten er listen over verdiene som sendes til konstruktøren for å initialisere det nyoppførte objektet.

Den nye operatøren tildeler nok minne som kreves for et objekt av en bestemt type. Derfor krever det ikke en sizeof () operatør, og det krever heller ikke å endre størrelsen på minnet som malloc () som bruker realloc () for å omfordele minnet. Den nye operatøren er en konstruksjon; det kaller konstruktøren til et objekt mens deklarasjonen som vanligvis brukes til å initialisere objektet.

Vi vet at den nye operatøren allokerer minnet i bunken, og størrelsen på bunken er begrenset. Så hvis bunken er ute av minne og nye operatør forsøker å tildele minnet, vil det føre til feil av den nye operatøren. Hvis den nye operatøren ikke tildeler minnet, vil det kaste et unntak, og hvis koden ikke klarer å håndtere dette unntaket, avslutter programmet unormalt.

Minnet som tildeles av operatøren, kan frigjøres ved å slette operatøren. Den nye operatøren slår av kjøretiden som det er en operatør, ikke en funksjon.

Definisjon av malloc ()

Malloc () er en funksjon som brukes til å tildele den forespurte mengden minne på bunken. Metoden returnerer pekeren til "void" -type som videre er, skriv cast for å få en peker til et minne av en spesifisert type og denne pekeren til minne er tilordnet en referansevariabel. Funksjonen malloc () ligner den nye operatøren i C ++ som den brukes til å fordele minne dynamisk. Malloc () er en standard biblioteksfunksjon. Syntaksen av malloc () -funksjonen er som følger:

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

Her angir "type" datatypen til variabelen som minne må tildeles. Variabelnavnet er navnet på referansevariabelen som pekeren returnert av malloc () vil bli tildelt. Den (type *) beskriver typen støping for å skaffe en peker til minnet i en bestemt type. Størrelsen av () beskriver malloc (), som hvilken minnestørrelse er nødvendig.

Malloc () krever type avstøpning fordi pekeren returnert av malloc () er av ugyldig type, så for å tilordne en type til pekeren, er type kasting nødvendig. Størrelsen av () kreves fordi funksjonen malloc () tildeler et råminnes, derfor er det nødvendig å fortelle funksjonen malloc () at hvilken minnestørrelse den skal tildele. Hvis det tildelte minnet ikke er tilstrekkelig, kan det endres eller omfordeles ved hjelp av realloc ().

Funksjonen malloc () tildeler minne på bunken. I så fall er bunken ute av minne, så returnerer malloc () -funksjonen en NULL-peker. Derfor bør referansevariabelen som inneholder pointer returnert av malloc (), kontrolleres før den brukes, ellers kan det føre til systemkrasj.

Minnet som er tildelt av malloc () -funksjonen, blir allokert ved hjelp av gratis (). Som funksjonsanrop fører til en overhead, krever malloc () mer tid for utførelse.

Nøkkelforskjeller mellom nye og malloc ()

  1. Den nye operatøren er en konstruksjon introdusert i C ++ og brukes i Java, C #, etc. På den annen side er malloc () en standardbiblioteksfunksjon som bare finnes i C-språk og støttes av C ++.
  2. Den nye operatøren tildeler nok minne til objektet av en spesifisert type, slik at det ikke krever størrelsesoperatør. På den annen side krever funksjonen malloc () funksjonen sizeof () for å la funksjonen få vite hvilken minnestørrelse den skal tildele.
  3. Den nye operatøren kan ringe konstruktøren til objektet under erklæring. På den annen side kan malloc () -funksjonen ikke kalle konstruktøren.
  4. Operatørens nye kan være overbelastet, men malloc () kunne ikke.
  5. Hvis den nye operatøren ikke tildeler minnet, kaster det et unntak som må håndteres av koden ellers programmet avsluttes. På den annen side returnerer funksjonen malloc () en NULL-peker hvis den ikke tildeler minne. Hvis pekeren brukes uten å sjekke dette, vil det føre til systemkrasj.
  6. Minnet som er tildelt ved hjelp av en ny operatør, kan fordeles ved hjelp av "slett". På den annen side kan minnet tildelt ved hjelp av malloc () -funksjonen fordeles ved bruk av gratis ().
  7. Når minnet er allokert ved hjelp av en ny operatør, kan den ikke omformes i alle fall. På den annen side kan minnet tildelt ved hjelp av malloc () -funksjonen bli omfordelt (resized) ved hjelp av realloc () -funksjonen.
  8. Eksekveringstiden for ny er mindre i forhold til malloc () fordi malloc er en funksjon og ny er en konstruksjon.

Konklusjon:

Funksjonen malloc () er den gamle måten å dynamisk allokere minnet på. I dag brukes den nye operatøren til å tildele minnet ved kjøretid fordi det har visse fordeler over malloc ().

Top