Aanbevolen, 2024

Editor'S Choice

Verschil tussen nieuw en malloc ()

De nieuwe en malloc () worden allebei gebruikt om het geheugen dynamisch toe te wijzen. Hoewel, nieuw en malloc () in veel contexten van elkaar verschillen. Het belangrijkste verschil tussen new en malloc () is dat new de operator is, gebruikt als een constructie. Aan de andere kant is de malloc () een standaard bibliotheekfunctie, die wordt gebruikt om geheugen tijdens runtime toe te wijzen. De andere verschillen tussen hen worden hieronder besproken in de vergelijkingstabel:

Vergelijkingstabel

Basis voor vergelijkingnieuwemalloc ()
TaalDe nieuwe operator is een specifieke functie van C ++, Java en C #.De functie malloc () is een functie van C.
Natuur"nieuw" is een operator.malloc () is een functie.
De grootte van( )new heeft de operator sizeof niet nodig omdat het voldoende geheugen toewijst voor een specifiek typemalloc vereist de sizeof-operator om te weten welke geheugengrootte hij moet toewijzen.
bouwerOperator nieuw kan de constructor van een object aanroepen.malloc () kan helemaal niet naar een constructor bellen.
initialisatieDe nieuwe operator kan een object initialiseren terwijl er geheugen aan wordt toegewezen.Geheugeninitialisatie kon niet worden gedaan in malloc.
overbelastingOperator nieuw kan overbelast zijn.De malloc () kan nooit worden overbelast.
MislukkingBij falen geeft operator nieuw een uitzondering.Bij falen retourneert malloc () een NULL.
vrijmakenDe geheugentoewijzing door nieuw, deallocated met behulp van "delete".De geheugentoewijzing door malloc () wordt verwijderd met behulp van een vrije () functie.
herverdelingDe nieuwe operator heralloceert het geheugen niet.Geheugen toegewezen door malloc () kan opnieuw worden toegewezen met realloc ().
UitvoeringDe operator nieuw snijdt de uitvoeringstijd af.De malloc () vereist meer tijd voor uitvoering.

Definitie van nieuw

De operator new is een operator voor geheugenallocatie die dynamisch geheugen toewijst. De nieuwe operator wijst geheugen toe in de heap en retourneert het startadres van dat geheugen dat is toegewezen aan een referentievariabele. De nieuwe operator is vergelijkbaar met de malloc () in C. De C ++ -compiler is echter compatibel met malloc (), maar het is het beste om een ​​nieuwe operator te gebruiken omdat deze bepaalde voordelen heeft ten opzichte van malloc (). De syntaxis van een nieuwe operator is als volgt:

 type variable_name = nieuw type (parameterlijst); 

Hier geeft "type" het datatype aan van de variabele waarvoor het geheugen moet worden toegewezen. Het woord "variabele naam" is de naam die wordt gegeven aan de referentievariabele die de aanwijzer naar het geheugen houdt. De haakjes hier specificeren het aanroepen van de constructor. De parameterlijst is de lijst met de waarden die aan de constructor worden doorgegeven om het nieuw geconstrueerde object te initialiseren.

De nieuwe operator wijst voldoende geheugen toe dat vereist is voor een object van een specifiek type. Daarom is er geen sizeof () -operator nodig, noch is het nodig om het formaat van het geheugen te wijzigen, zoals malloc () die realloc () gebruikt om het geheugen opnieuw toe te wijzen. De nieuwe operator is een constructie; het roept de constructor van een object aan terwijl het een declaratie is die over het algemeen wordt gebruikt om het object te initialiseren.

We weten dat de nieuwe operator het geheugen in de heap toewijst en dat de grootte van de heap beperkt is. Dus als de heap onvoldoende geheugen heeft en nieuwe operator probeert het geheugen toe te wijzen, zal dit leiden tot falen van de nieuwe operator. Als de nieuwe operator het geheugen niet toewijst, wordt er een uitzondering gegenereerd en als uw code deze uitzondering niet kan verwerken, wordt het programma abnormaal afgesloten.

Het door de nieuwe operator toegewezen geheugen kan worden vrijgegeven met behulp van de delete-operator. De nieuwe operator onderbreekt de uitvoeringstijd omdat het een operator is en geen functie.

Definitie van malloc ()

De malloc () is een functie die wordt gebruikt om de gevraagde hoeveelheid geheugen op de hoop toe te wijzen. De methode retourneert de aanwijzer van 'ongeldig' type dat verder is, type cast om een ​​aanwijzer naar een geheugen van een opgegeven type te krijgen en deze aanwijzer naar geheugen wordt toegewezen aan een referentievariabele. De functie malloc () is vergelijkbaar met de nieuwe operator in C ++ omdat deze wordt gebruikt om dynamisch geheugen toe te wijzen. De malloc () is een standaard bibliotheekfunctie. De syntaxis van de functie malloc () is als volgt:

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

Hier geeft "type" het datatype aan van de variabele waarvoor geheugen moet worden toegewezen. De variabele naam is de naam van de referentievariabele waaraan de aanwijzer die door malloc () wordt geretourneerd, wordt toegewezen. Het (type *) beschrijft het type casting om een ​​aanwijzer naar het geheugen in een specifiek type te verkrijgen. De grootte van () beschrijft malloc (), dat is de geheugengrootte die vereist is.

De malloc () vereist type-casting omdat de aanwijzer geretourneerd door de malloc () van het ongeldige type is. Daarom is het typen van een type vereist om een ​​type toe te wijzen aan de aanwijzer. De grootte van () is vereist omdat de functie malloc () een onbewerkt geheugen toewijst en daarom is het vereist om de functie malloc () aan te geven welke geheugengrootte deze moet toewijzen. Als het toegewezen geheugen niet voldoende is, kan het formaat worden gewijzigd of opnieuw worden toegewezen met realloc ().

De functie malloc () wijst geheugen toe aan de heap. Als de heap geen geheugen meer heeft, retourneert de functie malloc () een NULL-aanwijzer. Daarom moet de verwijzingsvariabele die de aanwijzer bevat, geretourneerd door malloc (), worden gecontroleerd voordat deze wordt gebruikt, anders kan dit leiden tot een systeemcrash.

Het geheugen dat is toegewezen door de functie malloc () wordt vrij gegeven met behulp van free (). Omdat functieaanroep tot overhead leidt, vereist malloc () meer tijd voor uitvoering.

Belangrijkste verschillen tussen nieuw en malloc ()

  1. De nieuwe operator is een constructie die is geïntroduceerd in C ++ en wordt gebruikt in Java, C #, enzovoort. Malloc () is daarentegen een standaard bibliotheekfunctie die alleen in C-taal wordt gevonden en wordt ondersteund door C ++.
  2. De nieuwe operator wijst voldoende geheugen toe voor het object van een opgegeven type, dus het vereist geen groottemaker. Aan de andere kant vereist de functie malloc () de operator sizeof () om de functie te laten weten welke geheugengrootte hij moet toewijzen.
  3. De nieuwe operator kan de constructeur van het object tijdens declaratie bellen. Aan de andere kant kan de functie malloc () de constructor niet aanroepen.
  4. De operator 'nieuw' kan overbelast zijn maar malloc () niet.
  5. Als de nieuwe operator het geheugen niet toewijst, wordt een uitzondering gegenereerd die moet worden afgehandeld door de code anders wordt het programma beëindigd. Aan de andere kant retourneert de functie malloc () een NULL-aanwijzer als deze er niet in slaagt om geheugen toe te wijzen. Als de aanwijzer wordt gebruikt zonder dit te controleren, resulteert dit in een systeemcrash.
  6. Het geheugen dat is toegewezen met behulp van een nieuwe operator kan worden verwijderd met behulp van 'delete'. Aan de andere kant kan het geheugen dat is toegewezen met behulp van de functie malloc (), worden verwijderd met behulp van free ().
  7. Zodra het geheugen is toegewezen met behulp van een nieuwe operator, kan het sowieso niet van grootte worden veranderd. Aan de andere kant kan het geheugen dat is toegewezen met behulp van de functie malloc () opnieuw worden toegewezen (van grootte veranderen) met behulp van de functie realloc ().
  8. De uitvoeringstijd van nieuw is minder in vergelijking met malloc () omdat malloc een functie is en nieuw een constructie.

Conclusie:

De functie malloc () is de oude manier om het geheugen dynamisch toe te wijzen. Tegenwoordig wordt de nieuwe operator gebruikt om het geheugen tijdens runtime toe te wijzen omdat het bepaalde voordelen heeft ten opzichte van malloc ().

Top