Diferența dintre Malloc și Nou Diferența dintre

Anonim

Malloc vs New

One din cele mai frecvente întrebări de interviu în angajarea unui programator de calculator este pentru aplicant / programator de calculator pentru a explica diferențele dintre malloc și noi. Atât malloc cât și noi există în domeniul limbajului calculatorului și adesea sunt utilizate de programatori pentru alocări dinamice ale memoriei.

Diferențele de bază dintre cele două sunt că malloc există în limba C, în timp ce noua este o caracteristică specifică a limbajului C ++. Malloc este, de asemenea, o funcție (care, pentru programatori, necesită un timp pentru a executa), în timp ce noul este un program operator (care reduce timpul de execuție). Acesta este un beneficiu nou pentru operator, deoarece programatorii care efectuează programare în timp real au nevoie să aleagă metoda cea mai rapidă de utilizat.

Operatorul nou este sigur pentru tip, spre deosebire de funcția malloc.

Funcția malloc este funcția de bibliotecă pentru limba C. Tot ce face este să aloce memoria și să-i returneze un indicator. Pe de altă parte, operatorul nou este un construct la nivel de limbă, iar sarcina lui este de a instanțiza un obiect prin alocarea memoriei și a apela constructorii potriviți. O altă diferență de funcționalitate malloc de la operatorul nou este că malloc necesită tipcasting în timpul declarației, în timp ce primul nu. De asemenea, funcția malloc folosește cuvântul "liber" pentru a șterge memoria, în timp ce "delete" este utilizat în operatorul nou pentru același scop.

Cei doi au de asemenea modalități diferite de a face față eșecului și epuizării memoriei. Dacă funcția malloc nu reușește, se întoarce cu un indicator NULL. Operatorul nou nu întoarce niciodată un indicator NULL, dar indică eșecul prin aruncarea unei excepții în schimb. Acesta este un avantaj pentru operator nou, deoarece programatorul de calculator nu trebuie să verifice pointerul returnat de fiecare dată când îl sună nouă, iar programatorul computerului va pierde o astfel de excepție.

Funcția malloc nu construiește un obiect (numit constructor de obiect), dar operatorul nou o face. Un alt avantaj al noului este că operatorul poate fi supraîncărcat în timp ce funcția malloc nu poate. Operatorul nou necesită un anumit număr de obiecte care să le aloce în timp ce funcția malloc necesită specificarea numărului total de octeți de alocat.

Memoria poate fi, de asemenea, redimensionată sau realocată utilizând funcția malloc utilizând realloc. Cu toate acestea, operatorul nou nu poate efectua această funcție și îl consideră unul dintre principalele dezavantaje ale operatorului. Un alt avantaj al funcției malloc over operator nou este că malloc poate extinde rapid cantitatea de memorie. Acest lucru este în continuare folosind malloc și realloc. Când faci aceeași situație în limbajul C ++, programatorul trebuie să creeze o nouă bucată de memorie cu operatorul nou. Noua memorie trebuie să aibă o dimensiune modificată și va fi copiată peste datele din memoria tampon originală.Tamponul original trebuie șters după copiere. Acesta poate fi un proces lent pentru un programator.

Operatorul nou are efectul asupra funcției malloc returnând exact tipul de date în timp ce funcția returnează void *. De asemenea, funcția malloc nu poate fi supraîncărcată în comparație cu operatorul nou, în care este posibilă supraîncărcarea. O altă caracteristică a operatorului nou este că există mai puține șanse de a face greșeli cu operatorul în comparație cu funcția malloc. Acest lucru este considerat un plus pentru programatori, mai ales dacă scriu multe coduri sau lucrează la un cod într-un program strict. Funcția malloc și liberă poate fi folosită în C ++, dar nu poate fi utilizată direct. Este recomandabil să folosiți în schimb noi și să ștergeți.

Rezumat:

1. Malloc este o funcție în timp ce noul este un operator.

2. Noua este o caracteristică specifică a limbajului C ++ în timp ce malloc este utilizat în limba C.

3. Operatorul new urmează cu "delete" în timp ce funcția malloc merge cu "free". „

4. Funcția malloc este funcția de bibliotecă pentru limba C în timp ce operatorul nou este un construct la nivel de limbă din limba C ++.