Diagramă de comparație
Bazele comparației | nou | malloc () |
---|---|---|
Limba | Operatorul nou este o caracteristică specifică a C ++, Java și C #. | Funcția malloc () este o caracteristică a lui C. |
Natură | "nou" este un operator. | malloc () este o funcție. |
sizeof () | noul nu are nevoie de operatorul de dimensiuni și de a aloca suficientă memorie pentru tipul specific | malloc cere operatorului sizeof să știe ce dimensiune de memorie trebuie să aloce. |
Constructor | Operatorul nou poate apela constructorul unui obiect. | malloc () nu poate face apel la un constructor. |
Inițializarea | Operatorul nou ar putea inițializa un obiect în timp ce alocă memorie acestuia. | Inițializarea memoriei nu a putut fi efectuată în malloc. |
supraîncărcarea | Operatorul nou poate fi supraîncărcat. | Malloc () nu poate fi niciodată supraîncărcat. |
eșec | La eșec, operatorul nou aruncă o excepție. | La eșec, malloc () returnează un NULL. |
deallocation | Alocarea memoriei de către noi, dealocată utilizând "delete". | Alocarea memoriei de către malloc () este dealocată folosind o funcție free (). |
realocarea | Noul operator nu realochează memoria. | Memoria alocată de malloc () poate fi realocată utilizând realloc (). |
Execuţie | Operatorul nou reduce timpul de execuție. | Malloc () necesită mai mult timp pentru execuție. |
Definiția new
Operatorul nou este un operator de alocare a memoriei care alocă dinamic din memorie. Noul operator alocă memoria în heap și returnează adresa de pornire a acelei memorii care este atribuită unei variabile de referință. Noul operator este similar cu malloc () în C. Cu toate acestea, compilatorul C ++ este compatibil cu malloc (), dar cel mai bine este să folosiți un operator nou deoarece are anumite avantaje față de malloc (). Sintaxa noului operator este după cum urmează:
tip variabilă_name = tip nou (listă parametru);
Aici, "type" desemnează tipul de date al variabilei pentru care memoria trebuie alocată. Cuvântul "variable_name" este numele dat variabilei de referință care ține pointerul în memorie. Paranteza specifică aici chemarea constructorului. Parametrul_list este lista valorilor care sunt transmise constructorului pentru a inițializa obiectul nou construit.
Noul operator alocă suficientă memorie necesară pentru un obiect de tip specific. Prin urmare, nu necesită un operator sizeof () și nici nu necesită redimensionarea memoriei ca malloc () care folosește realloc () pentru a realoca memoria. Noul operator este un construct; el numește constructorul unui obiect în timp ce declarația este folosită în general pentru a inițializa obiectul.
Știm că noul operator alocă memoria în heap și dimensiunea haldei este limitată. Deci, dacă halda este în memorie și noul operator încearcă să aloce memoria, va duce la eșecul noului operator. Dacă noul operator nu alocă memoria, va arunca o excepție și dacă codul dvs. nu poate gestiona acea excepție, programul se termină anormal.
Memoria alocată de operatorul nou poate fi eliberată utilizând operatorul de ștergere. Noul operator elimină timpul de execuție deoarece este un operator, nu o funcție.
Definiția malloc ()
Funcția malloc () este o funcție care este utilizată pentru alocarea cantității solicitate de memorie pe heap. Metoda returnează pointerul de tip "void", care este în continuare, tip cast pentru a obține un pointer la o memorie de un tip specificat și acest pointer în memorie este atribuit unei variabile de referință. Funcția malloc () este similară cu noul operator din C ++, deoarece este utilizat pentru alocarea dinamică a memoriei. Malloc () este o funcție standard de bibliotecă. Sintaxa funcției malloc () este după cum urmează:
tip variabila_name = (tip *) malloc (sizeof (type));
Aici, "tip" indică tipul de date al variabilei pentru care trebuie alocată memoria. Variabila_name este numele variabilei de referință la care pointerul returnat de malloc () va fi atribuit. Tipul (tip *) descrie tipul de turnare pentru a obține un indicator al memoriei într-un anumit tip. Dimensiunea () descrie malloc (), că dimensiunea memoriei este necesară.
Modulul malloc () necesită turnarea de tip, deoarece pointerul returnat de malloc () este de tip void, deci, pentru a atribui un tip pointerului, este necesar turnarea de tip. Dimensiunea () este necesară deoarece funcția malloc () alocă o memorie brută, prin urmare, este necesar să se spună funcției malloc () ce dimensiune a memoriei trebuie să aloce. Dacă memoria alocată nu este suficientă, aceasta poate fi redimensionată sau realocată utilizând realloc ().
Funcția malloc () alocă memoria pe heap. În cazul în care heapul este în memorie, funcția malloc () returnează un indicator NULL. Prin urmare, variabila de referință care conține pointerul returnat de malloc (), ar trebui verificată înainte de a fi utilizată, altfel ar putea duce la un accident de sistem.
Memoria alocată de funcția malloc () este dealocată utilizând free (). Ca apel de funcții conduce la un overhead, malloc () necesită mai mult timp pentru execuție.
Diferențele cheie între noul și malloc ()
- Noul operator este un constructor introdus în C ++ și folosit în Java, C # etc. Pe de altă parte, malloc () este o funcție standard de bibliotecă găsită numai în limba C și susținută de C ++.
- Noul operator alocă suficientă memorie pentru obiectul unui tip specificat, astfel încât acesta nu necesită operatorul de dimensionare. Pe de altă parte, funcția malloc () cere operatorului sizeof () să permită funcției să știe ce dimensiune a memoriei trebuie să aloce.
- Noul operator poate apela constructorul obiectului în timpul declarației. Pe de altă parte, funcția malloc () nu poate apela constructorul.
- Operatorul "nou" ar putea fi supraîncărcat, dar malloc () nu ar putea.
- Dacă noul operator nu alocă memoria, el aruncă o excepție care trebuie să fie tratată de codul altceva în care programul se va termina. Pe de altă parte, funcția malloc () returnează un indicator NULL dacă nu reușește să aloce memoria. Dacă indicatorul este utilizat fără a verifica acest lucru, va duce la un accident de sistem.
- Memoria alocată utilizând un nou operator poate fi dealocată utilizând "șterge". Pe de altă parte, memoria alocată folosind funcția malloc () poate fi dealocată folosind free ().
- Odată ce memoria este alocată utilizând un nou operator, aceasta nu poate fi redimensionată oricum. Pe de altă parte, memoria alocată folosind funcția malloc () poate fi realocată (redimensionată) folosind funcția realloc ().
- Timpul de execuție al noului este mai mic decât în cazul malloc (), deoarece malloc este o funcție și noua este o construcție.
Concluzie:
Funcția malloc () este metoda veche de alocare dinamică a memoriei. În zilele noastre, noul operator este folosit pentru alocarea memoriei în timpul rulării, deoarece are anumite avantaje față de malloc ().