Razlika između new i malloc ()

Autor: Laura McKinney
Datum Stvaranja: 1 Travanj 2021
Datum Ažuriranja: 5 Svibanj 2024
Anonim
030 - Programski jezik C - Prosleđivanje argumenata po vrednosti i po referenci (pokazivač)
Video: 030 - Programski jezik C - Prosleđivanje argumenata po vrednosti i po referenci (pokazivač)

Sadržaj


Novo i malloc () koriste se za dinamičku raspodjelu memorije. Iako su, novo i malloc () različiti u mnogočemu. Primarna razlika između new i malloc () je ta novi je operator, koji se koristi kao konstrukt. S druge strane malloc () je standardna bibliotečka funkcija, koja se koristi za raspoređivanje memorije u vrijeme izvođenja. Ostale razlike između njih razmatrane su u tablici usporedbe:

  1. Usporedni grafikon
  2. definicija
  3. Ključne razlike
  4. Zaključak

Usporedni grafikon

Osnove za usporedbunovimalloc ()
JezikOperator new specifična je značajka C ++, Java i C #. Funkcija malloc () je obilježje C.
Priroda"novo" je operator.malloc () je funkcija.
veličina( )novo ne treba operatoru veličine da dobije dovoljno memorije za određenu vrstu malloc zahtijeva operatora sizeof da bi znao kakvu veličinu memorije mora rasporediti.
Konstruktor Operator new može nazvati konstruktor objekta.malloc () uopće ne može nazvati konstruktora.
InicijalizacijaOperator new mogao bi inicijalizirati objekt dok mu je dodijelio memoriju.Inicijalizacija memorije nije se mogla izvršiti malim putem.
preopterećenje Operator novo može biti preopterećen.Malloc () se nikad ne može preopteretiti.
NeuspjehU slučaju neuspjeha, operator novog baca iznimku.Nakon neuspjeha, malloc () vraća NULL.
dealociranjeDodjela memorije novim, alociranim u memoriji pomoću "delete".Dodjela memorije malloc () raspoređena je funkcijom free ().
ponovna dodjelaNovi operator ne preraspodjeljuje memoriju.Memorija dodijeljena malloc () može se preusmjeriti pomoću realloc ().
IzvršenjeOperator novi skraćuje vrijeme izvršenja.Malloc () zahtijeva više vremena za izvršenje.


Definicija novog

Operator novi je operator dodjele memorije koji dinamički raspoređuje memoriju. Novi operator dodjeljuje memoriju u hrpi i vraća početnu adresu te memorije koja je dodijeljena referentnoj varijabli. Novi operator sličan je malloc () u C. Međutim, C ++ prevodilac je kompatibilan s malloc (), ali najbolje je koristiti novog operatera, jer ima određene prednosti u odnosu na malloc (). Sintaksa novog operatora je sljedeća:

vrsta varijable_name = novi tip (parametar_list);

Ovdje "tip" označava vrstu podataka varijable kojoj je memorija potrebna. Riječ "naziv varijable" naziv je referentne varijable koja drži pokazivač na memoriju. U zagradama se ovdje navodi pozivanje konstruktora. Popis parametara je popis vrijednosti koje se prosljeđuju konstruktoru za inicijalizaciju novoizgrađenog objekta.

Novi operator dodjeljuje dovoljno memorije potrebne za objekt određene vrste. Dakle, ne zahtijeva operator sizeof () niti zahtijeva promjenu veličine memorije poput malloc () koji koristi realloc () za preraspodjelu memorije. Novi operator je konstrukt; poziva konstruktor objekta, dok deklaraciju koja se općenito koristi za inicijalizaciju objekta.


Znamo da novi operator raspoređuje memoriju u hrpi i veličina hrpe je ograničena. Dakle, ako hrpi ostane bez memorije i novi operater pokušava rasporediti memoriju, to će dovesti do neuspjeha novog operatera. Ako novi operator ne dodijeli memoriju, bacit će izuzetak, a ako vaš kôd ne može podnijeti tu iznimku, program se prekida nenormalno.

Memorija koju je operator dodijelio novi može se osloboditi pomoću operatora brisanja. Novi operator skraćuje vrijeme izvršenja jer je to operator, a ne funkcija.

Definicija malloc ()

malloc () je funkcija koja se koristi za dodjelu tražene količine memorije na hrpu. Metoda vraća pokazivač tipa "void" koji je nadalje, upišite cast da bi pokazatelj dobio u memoriji određenog tipa i taj je pokazivač u memoriji dodijeljen referentnoj varijabli. Funkcija malloc () slična je novom operatoru u C ++ jer se koristi za dinamičko raspoređivanje memorije. Malloc () je standardna funkcija knjižnice. Sintaksa funkcije malloc () je sljedeća:

upišite varijablu_ime = (vrsta *) malloc (sizeof (tip));

Ovdje "tip" ukazuje na vrstu podataka varijable za koju je potrebno dodijeliti memoriju. Ime varijable je ime referentne varijable kojoj će se dodijeliti pokazivač vraćen malloc (). (Type *) opisuje lijevanje tipa radi dobivanja pokazivača na memoriju određenog tipa. Sizeof () opisuje malloc (), veličinu memorije koja je potrebna.

Malloc () zahtijeva lijevanje tipa, jer je pokazivač koji je vratio malloc () nevažećeg tipa, tako da je za dodjeljivanje vrste pokazivaču potrebno lijevanje tipa. Sizeof () je potreban jer funkcija malloc () dodjeljuje sirovu memoriju, pa je potrebno reći funkciji malloc () koju veličinu memorije mora rasporediti. Ako dodijeljena memorija nije dovoljna, ona se može promijeniti veličinom ili dodijeliti pomoću realloc ().

Funkcija malloc () raspoređuje memoriju na hrpi. U slučaju da hrpa tada ostane bez memorije, funkcija malloc () vraća pokazivač NULL. Dakle, referentnu varijablu koja sadrži pokazivač vraćen malloc (), treba provjeriti prije upotrebe, jer u protivnom može doći do pada sustava.

Memorija dodijeljena funkcijom malloc () raspoređuje se koristeći free (). Kako poziv funkcije vodi do nadzemnih troškova, malloc () zahtijeva više vremena za izvršavanje.

  1. Novi operater je konstrukcija koja je uvedena u C ++ i koristi se u Java, C #, itd. S druge strane, malloc () je standardna bibliotečka funkcija koja se nalazi samo na jeziku C i podržava je C ++.
  2. Novi operator dodjeljuje dovoljno memorije za objekt određenog tipa, tako da ne zahtijeva operatora veličine. S druge strane, za funkciju malloc () potreban je operator sizeof () kako bi funkcija znala koju veličinu memorije mora rasporediti.
  3. Novi operator može nazvati konstruktora objekta tijekom deklaracije. S druge strane, funkcija malloc () ne može pozvati konstruktor.
  4. Operator "novo" mogao bi biti preopterećen, ali malloc () nije mogao.
  5. Ako novi operator ne dodijeli memoriju, izuzeće će izuzetak koji mora biti obrađen kodom inače program će prekinuti. S druge strane, funkcija malloc () vraća pokazivač NULL ako ne dodjeljuje memoriju. Ako se pokazivač koristi bez provjere, to će rezultirati padom sustava.
  6. Memorija dodijeljena novim operatorom može se dislocirati pomoću 'delete'. S druge strane, memorija dodijeljena funkcijom malloc () može se rasporediti pomoću free ().
  7. Jednom kada se memorija dodijeli novim operatorom, ni na koji način se ne može promijeniti veličinu. S druge strane, memorija dodijeljena funkcijom malloc () može se preusmjeriti (promijeniti) veličinom pomoću realloc () funkcije.
  8. Vrijeme izvođenja novog je manje u usporedbi s malloc (), jer je malloc funkcija, a new konstrukt.

Zaključak:

Funkcija malloc () stari je način dinamičkog raspoređivanja memorije. Danas se novi operator koristi za raspoređivanje memorije u vrijeme izvođenja jer ima određene prednosti u odnosu na malloc ().