Forskellen mellem ny og malloc ()

Forfatter: Laura McKinney
Oprettelsesdato: 1 April 2021
Opdateringsdato: 5 Kan 2024
Anonim
Section, Week 5
Video.: Section, Week 5

Indhold


Den nye og malloc () begge bruges til dynamisk allokering af hukommelsen. Selvom nye og malloc () er forskellige i mange ulemper. Den primære forskel mellem ny og malloc () er den ny er operatøren, der bruges som en konstruktion. På den anden side malloc () er en standardbiblioteksfunktion, der bruges til at allokere hukommelse ved kørsel. De andre forskelle mellem dem diskuteres nedenfor i sammenligningstabellen:

  1. Sammenligningstabel
  2. Definition
  3. Vigtige forskelle
  4. Konklusion

Sammenligningstabel

Grundlag for sammenligningnymalloc ()
SprogDen nye operatør er en bestemt funktion i C ++, Java og C #. Funktionen malloc () er en funktion af C.
Natur"nyt" er en operatør.malloc () er en funktion.
størrelse af ()nyt behøver ikke størrelsen af ​​operatøren, da den giver nok hukommelse til specifik type malloc kræver, at operatørens størrelse skal vide, hvilken hukommelsesstørrelse den har til at tildele.
Constructor Operatør nyt kan kalde konstruktøren af ​​et objekt.malloc () kan slet ikke ringe til en konstruktør.
InitialiseringDen nye operatør kunne initialisere et objekt, mens det tildeles hukommelse til det.Hukommelsesinitialisering kunne ikke udføres i malloc.
overbelastning Operatørens nye kan overbelastes.Malloc () kan aldrig overbelastes.
FiaskoVed fiasko kaster operatørens nye undtagelse.Ved fiasko returnerer malloc () en NULL.
deallokeringHukommelsesallokering ved ny, omfordelt med "slet".Hukommelsesallokering med malloc () fordeles ved hjælp af en gratis () -funktion.
omfordelingDen nye operatør omfordeler ikke hukommelsen.Hukommelse, der er tildelt af malloc (), kan omfordeles ved hjælp af realloc ().
UdførelseOperatøren nye kortere udførelsestiden.Malloc () kræver mere tid til udførelse.


Definition af nyt

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

type variable_name = ny type (parameter_list);

Her angiver “type” datatypen for den variabel, som hukommelsen skal allokeres til. Ordet “variabelnavn” er det navn, der gives til referencevariablen, der holder markøren i hukommelsen. Parentesen her specificerer opkald af konstruktøren. Parameterlisten er listen over de værdier, der sendes til konstruktøren for at initialisere det nyopførte objekt.

Den nye operator tildeler nok hukommelse, der kræves til et objekt af en bestemt type. Derfor kræver den ikke en operator af sizeof () og kræver heller ikke 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, mens erklæring, der generelt bruges til at initialisere objektet.


Vi ved, at den nye operatør tildeler hukommelsen i dyngen, og størrelsen på dyngen er begrænset. Så hvis dyngen er ude af hukommelse, og den nye operatør forsøger at tildele hukommelsen, vil det føre til den nye operatørs fiasko. Hvis den nye operatør ikke klarer at allokere hukommelsen, kaster den en undtagelse, og hvis din kode ikke er i stand til at håndtere denne undtagelse, afsluttes programmet unormalt.

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

Definition af malloc ()

Det malloc () er en funktion, der bruges til at allokere den ønskede mængde hukommelse på dyngen. Metoden returnerer markøren af ​​typen 'ugyldig', som er videre, skriv cast for at få en markør til en hukommelse af en specificeret type, og denne markør til hukommelse er tildelt en referencevariabel. Malloc () -funktionen ligner den nye operatør i C ++, da den bruges til at allokere hukommelse dynamisk. Malloc () er en standardbiblioteksfunktion. Syntaks for malloc () -funktionen er som følger:

type variable_name = (type *) malloc (størrelse af (type));

Her angiver “type” datatypen for den variabel, som hukommelsen skal allokeres til. Variabelnavnet er navnet på den referencevariabel, som markøren, der er returneret af malloc (), vil blive tildelt. (Type *) beskriver typen casting for at få en markør til hukommelsen i en bestemt type. Størrelsenof () beskriver malloc (), hvilken hukommelsesstørrelse der kræves.

Malloc () kræver casting af typen, fordi markøren, der returneres af malloc (), er af tomtype, så for at tildele en type til markøren, er type casting påkrævet. Størrelsenof () er påkrævet, fordi funktionen malloc () tildeler en rå hukommelse, og det er derfor påkrævet at fortælle malloc () -funktionen, hvilken hukommelsesstørrelse den skal tildele. Hvis den tildelte hukommelse ikke er tilstrækkelig, kan den ændres størrelse eller omdisponeres ved hjælp af realloc ().

Funktionen malloc () tildeler hukommelse på dyngen. I tilfælde af, at dyngen ikke er i hukommelse, returnerer malloc () -funktionen en NULL-markør. Derfor bør referencevariablen, der indeholder pointer returneret af malloc (), kontrolleres, før den bruges, ellers kan det resultere i et systemnedbrud.

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

  1. Den nye operatør er en konstruktion introduceret i C ++ og brugt i Java, C # osv. På den anden side er malloc () en standardbiblioteksfunktion, der kun findes på C-sprog og understøttet af C ++.
  2. Den nye operatør tildeler nok hukommelse til objektet af en specificeret type, så det kræver ikke størrelsesoperatør. På den anden side kræver malloc () -funktionen operatoren sizeof () for at lade funktionen vide, hvilken hukommelsesstørrelse den skal tildele.
  3. Den nye operatør kan ringe til konstruktøren af ​​objektet under erklæringen. På den anden side kan malloc () -funktionen ikke kalde konstruktøren.
  4. Operatøren 'nyt' kunne være overbelastet, men malloc () kunne ikke.
  5. Hvis den nye operatør ikke klarer at allokere hukommelsen, kaster den en undtagelse, der skal håndteres med den kode, ellers programmet afslutter. På den anden side returnerer malloc () -funktionen en NULL-markør, hvis den ikke klarer at allokere hukommelse. Hvis markøren bruges uden at kontrollere dette, vil det resultere i en systemnedbrud.
  6. Hukommelsen, der er 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 ikke ændres i det alligevel. På den anden side kan hukommelsen, der er tildelt ved hjælp af malloc () -funktion, blive omfordelt (ændret størrelse) ved hjælp af realloc () -funktionen.
  8. Udførelsestid for nyt er mindre sammenlignet med malloc (), fordi malloc er en funktion og nyt er en konstruktion.

Konklusion:

Malloc () -funktionen er den gamle måde at allokere hukommelsen dynamisk på. I dag bruges den nye operatør til at allokere hukommelsen under kørsel, fordi den har visse fordele i forhold til malloc ().