Diferența dintre nou și malloc ()

Autor: Laura McKinney
Data Creației: 1 Aprilie 2021
Data Actualizării: 5 Mai 2024
Anonim
iOS App Development with Swift by Dan Armendariz
Video: iOS App Development with Swift by Dan Armendariz

Conţinut


Ambele noi și malloc () sunt folosite pentru a aloca dinamic memoria. Deși, noi și malloc () sunt diferite în multe contra. Diferența principală dintre nou și malloc () este că nou este operatorul, folosit ca construct. Pe de altă parte, malloc () este o funcție standard de bibliotecă, folosită pentru alocarea memoriei în timpul rulării. Celelalte diferențe între ele sunt prezentate mai jos în graficul de comparație:

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațienoumalloc ()
LimbaOperatorul 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.
dimensiunea ()noul nu are nevoie de dimensiunea operatorului, alocând suficientă memorie pentru un tip specific malloc cere operatorului sizeof să știe ce dimensiune de memorie are de alocat.
Constructor Operatorul nou poate apela constructorul unui obiect.malloc () nu poate face deloc un apel către un constructor.
InițializareaOperatorul nou ar putea inițializa un obiect în timp ce i-a alocat memorie.Initializarea memoriei nu a putut fi facuta in malloc.
supraîncărcarea Noul operator poate fi supraîncărcat.Malloc () nu poate fi niciodată supraîncărcat.
eșecÎn caz de eșec, operatorul nou aruncă o excepție.La eșec, malloc () returnează un NULL.
deallocationAlocarea memoriei prin noua, alocată folosind „șterge”.Alocarea de memorie prin malloc () este dezactivată folosind o funcție free ().
realocareaNoul operator nu realocă memoria.Memoria alocată de malloc () poate fi realocată folosind realloc ().
ExecuţieNou operatorul 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 memoria. Noul operator alocă memorie în bucată și returnează adresa de pornire a acelei memorii care este atribuită unei variabile de referință. Noul operator este similar cu malloc () din 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 unui operator nou este următoarea:

tip variable_name = tip nou (parametru_list);

Aici, „tip” denotă tipul de date al variabilei pentru care trebuie alocată memoria. Cuvântul „variable_name” este numele dat variabilei de referință care ține indicatorul în memorie. Paranteza de aici specifică apelarea constructorului. Parametrul_list este lista valorilor care sunt transmise constructorului pentru inițializarea obiectului nou construit.

Noul operator alocă suficientă memorie necesară unui obiect de un anumit tip. Prin urmare, nu necesită un operator size of () și nici nu necesită redimensionarea memoriei ca malloc () care folosește realloc () pentru a realoca memoria. Noul operator este o construcție; el numește constructorul unui obiect în timp ce declarație, care este de obicei utilizat pentru inițializarea obiectului.


Știm că noul operator alocă memoria în grădină și dimensiunea mormanului este limitată. Așadar, în cazul în care grupa este fără memorie și noul operator încearcă să aloce memoria, aceasta va duce la eșecul noului operator. Dacă noul operator nu reușește să aloce memoria, va arunca o excepție, iar dacă codul dvs. nu poate gestiona această excepție, programul se încheie anormal.

Memoria alocată de operator nou poate fi eliberată utilizând operatorul de ștergere. Noul operator reduce timpul de execuție, deoarece este un operator, nu o funcție.

Definiția malloc ()

malloc () este o funcție care este utilizată pentru a aloca cantitatea de memorie solicitată în grămadă. Metoda returnează indicatorul de tip „void” care este în continuare, tip cast pentru a duce un pointer la o memorie de 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 de bibliotecă standard. Sintaxa funcției malloc () este următoarea:

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

Aici, „tip” indică tipul de date al variabilei pentru care trebuie alocată memoria. Variabila nume este numele variabilei de referință căreia indicatorul returnat de malloc () va fi atribuit. Tipul (tip *) descrie tipul de turnare pentru a obține un indicator în memorie într-un tip specific. Sizeof () descrie malloc (), că dimensiunea memoriei este necesară.

Malloc () necesită turnare tip deoarece pointerul returnat de malloc () este de tip void, deci, pentru a atribui un tip indicatorului, este necesară o turnare de tip. Dimensiuneaof () este necesară, deoarece funcția malloc () alocă o memorie brută, prin urmare, trebuie să spună funcției malloc () că ce dimensiune a memoriei trebuie să aloce. Dacă memoria alocată nu este suficientă, poate fi redimensionată sau realocată folosind reallocare ().

Funcția malloc () alocă memorie pe grămadă. În cazul în care heap-ul nu mai este în memorie, funcția malloc () returnează un indicator NULL. Prin urmare, variabila de referință care conține indicatorul returnat de malloc (), ar trebui să fie verificată înainte de a fi utilizată, altfel poate duce la o blocare a sistemului.

Memoria alocată de funcția malloc () este redistribuită folosind gratuit (). Deoarece apelul funcțional duce la o operație generală, malloc () necesită mai mult timp pentru execuție.

  1. Noul operator este o construcție introdusă în C ++ și utilizată în Java, C #, etc. Pe de altă parte, malloc () este o funcție de bibliotecă standard găsită doar în limbajul C și susținută de C ++.
  2. Noul operator alocă suficientă memorie pentru obiectul unui tip specificat, deci nu necesită dimensionarea operatorului. Pe de altă parte, funcția malloc () necesită operatorul sizeof () pentru a anunța funcția că dimensiunea memoriei trebuie să aloce.
  3. Noul operator poate apela constructorul obiectului în timpul declarației. Pe de altă parte, funcția malloc () nu poate apela constructorul.
  4. Operatorul „nou” ar putea fi supraîncărcat, dar malloc () nu a putut.
  5. Dacă noul operator nu reușește să aloce memoria, aruncă o excepție care trebuie gestionată de codul altfel programul se va încheia. Pe de altă parte, funcția malloc () returnează un indicator NULL dacă nu reușește să aloce memorie. Dacă indicatorul este utilizat fără a verifica acest lucru, va rezulta o blocare a sistemului.
  6. Memoria alocată folosind un operator nou poate fi redistribuită folosind „șterge”. Pe de altă parte, memoria alocată folosind funcția malloc () poate fi dezactivată folosind free ().
  7. Odată ce memoria este alocată folosind un operator nou, ea nu poate fi redimensionată. Pe de altă parte, memoria alocată folosind funcția malloc () poate fi realocată (redimensionată) folosind funcția realloc ().
  8. Timpul de execuție al noului este mai mic în comparație cu malloc (), deoarece malloc este o funcție, iar nou este o construcție.

Concluzie:

Funcția malloc () este vechea cale de a aloca dinamic memoria. În zilele noastre, noul operator este folosit pentru a aloca memoria în timpul rulării, deoarece are anumite avantaje față de malloc ().