Forskjellen mellom nye og malloc ()

Forfatter: Laura McKinney
Opprettelsesdato: 1 April 2021
Oppdater Dato: 5 Kan 2024
Anonim
Section, Week 5
Video: Section, Week 5

Innhold


Den nye og malloc () begge brukes til å allokere minnet dynamisk. Skjønt, nye og malloc () er forskjellige i mange ulemper. Den primære forskjellen mellom ny og malloc () er den ny er operatøren, brukt som konstruksjon. På den annen side, malloc () er en standard bibliotekfunksjon som brukes til å tildele minne ved kjøretid. De andre forskjellene mellom dem blir diskutert nedenfor i sammenligningstabellen:

  1. Sammenligningstabell
  2. Definisjon
  3. Viktige forskjeller
  4. Konklusjon

Sammenligningstabell

Grunnlag for sammenligningnymalloc ()
SpråkOperatøren nye er en spesifikk funksjon i C ++, Java og C #. Funksjonen malloc () er en funksjon av C.
Natur"ny" er en operatør.malloc () er en funksjon.
størrelsen av( )nye trenger ikke størrelsen på operatøren fordi den gir nok minne for en bestemt type malloc krever at operatørens størrelse skal vite hvilken minnestørrelse den har til å tildele.
Constructor Operatør nye kan ringe konstruktøren av et objekt.malloc () kan overhode ikke ringe til en konstruktør.
initialiseringOperatøren nye kunne initialisere et objekt mens det tildeles minne til det.Initialisering av minne kan ikke gjøres i malloc.
overbelastning Operatørnytt kan overbelastes.Malloc () kan aldri overbelastes.
FailureVed feil, kaster operatør nye et unntak.Ved feil, returnerer malloc () en NULL.
fradelingHukommelsesallokering med ny, omplassert ved hjelp av "slett".Minnetildelingen med malloc () fordeles med en gratis () -funksjon.
reallokeringDen nye operatøren fordeler ikke minnet.Minne tildelt av malloc () kan omfordeles ved hjelp av realloc ().
HenrettelseOperatøren ny kutter utførelsestiden.Malloc () krever mer tid for utførelse.


Definisjon av nytt

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

type variable_name = ny type (parameter_list);

Her betegner "type" datatypen til variabelen som minnet må tildeles. Ordet “variabelnavn” er navnet gitt til referansevariabelen som holder pekeren til minnet. Parentesen her spesifiserer anrop av konstruktøren. 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 reallokering () for å omfordele minnet. Den nye operatøren er en konstruksjon; den kaller konstruktøren av et objekt mens deklarasjon som vanligvis brukes til å initialisere objektet.


Vi vet at den nye operatøren tildeler minnet i dyngen og størrelsen på dyngen er begrenset. Så hvis dyngen er tom for minne og den nye operatøren prøver å tildele minnet, vil det føre til svikt i den nye operatøren. Hvis den nye operatøren ikke klarer å tildele minnet, vil den kaste et unntak, og hvis koden din ikke klarer å håndtere det unntaket, avsluttes programmet unormalt.

Minnet som er tilordnet av operatøren nytt, kan frigjøres ved hjelp av sletteoperatøren. Den nye operatøren kutter utførelsestiden da den er en operatør, ikke en funksjon.

Definisjon av malloc ()

De malloc () er en funksjon som brukes til å fordele den ønskede mengden minne på haugen. Metoden returnerer pekeren av ‘void’ type som er videre, skriv cast for å få en peker til et minne av en spesifisert type, og denne pekeren til minne er tilordnet en referansevariabel. Malloc () -funksjonen ligner på den nye operatøren i C ++ som den brukes til å allokere minne dynamisk. Malloc () er en standard bibliotekfunksjon. Syntaksen til malloc () -funksjonen er som følger:

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

Her indikerer “type” datatypen til variabelen som minnet må tildeles. Variabelnavnet er navnet på referansevariabelen som pekeren som returneres av malloc () tilordnes. (Typen *) beskriver typen avstøpning for å få en peker til minnet i en bestemt type. Størrelsenof () beskriver malloc (), hvilken minnestørrelse som kreves.

Malloc () krever avstøpning av typen fordi pekeren som returneres av malloc () er av tomtype, for å tilordne en type til pekeren, er det nødvendig å skrive inn casting. Størrelsenof () er nødvendig fordi funksjonen malloc () tildeler et rått minne, og det er derfor påkrevd å fortelle malloc () -funksjonen hvilken minnestørrelse den må tildeles. Hvis det tildelte minnet ikke er tilstrekkelig, kan det endres størrelse eller omdisponeres ved å bruke omfordeling ().

Malloc () -funksjonen tildeler minne på haugen. I tilfelle bunken er tom for minne, returnerer malloc () -funksjonen en NULL-peker. Derfor bør referansevariabelen som inneholder pekeren returnert av malloc (), sjekkes før den brukes, ellers kan det føre til et systemkrasj.

Minnet som er tildelt av malloc () -funksjonen blir fordelt med gratis (). Ettersom funksjonssamtaler fører til en overhead, krever malloc () mer tid for utførelse.

  1. Den nye operatøren er en konstruksjon introdusert i C ++ og brukt i Java, C #, etc. På den annen side er malloc () en standard bibliotekfunksjon som bare finnes på C-språk og støttet av C ++.
  2. Den nye operatøren tildeler nok minne til objektet av en spesifisert type, så det krever ikke størrelse på operatøren. På den annen side krever malloc () -funksjonen operatoren sizeof () for å la funksjonen vite at hvilken minnestørrelse den har å tildele.
  3. Den nye operatøren kan ringe konstruktøren av objektet mens deklarasjonen. På den annen side kan ikke malloc () -funksjonen ringe konstruktøren.
  4. Operatøren ‘nye’ kan være overbelastet, men malloc () kunne ikke.
  5. Hvis den nye operatøren ikke klarer å tildele minnet, kaster den et unntak som må håndteres med koden ellers programmet vil avslutte. På den annen side returnerer malloc () -funksjonen en NULL-peker hvis den ikke klarer å tildele minne. Hvis pekeren brukes uten å sjekke dette, vil det føre til et 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 som er tildelt ved hjelp av malloc () -funksjonen bli fordelt ved å bruke gratis ().
  7. Når minnet er tildelt ved hjelp av en ny operatør, kan det ikke endres størrelse på det. På den annen side kan minnet som er tildelt ved bruk av malloc () -funksjon, omfordeles (endres størrelse) ved å bruke realloc () -funksjonen.
  8. Utførelsestiden for nye er mindre sammenlignet med malloc () fordi malloc er en funksjon og ny er en konstruksjon.

Konklusjon:

Malloc () -funksjonen er den gamle måten å dynamisk fordele minnet på. I dag brukes den nye operatøren til å tildele minnet under kjøretid fordi det har visse fordeler i forhold til malloc ().