Verschil tussen nieuw en malloc ()

Schrijver: Laura McKinney
Datum Van Creatie: 1 April 2021
Updatedatum: 5 Kunnen 2024
Anonim
Aardbeving Bij PSG: Messi Of Neymar Wisselen Volkomen Logisch!
Video: Aardbeving Bij PSG: Messi Of Neymar Wisselen Volkomen Logisch!

Inhoud


De nieuwe en malloc () worden beide gebruikt om het geheugen dynamisch toe te wijzen. Hoewel, new en malloc () verschillen in veel nadelen. Het primaire verschil tussen nieuw en malloc () is dat nieuw is de operator, gebruikt als een construct. Aan de andere kant, de malloc () is een standaardbibliotheekfunctie, die wordt gebruikt om tijdens runtime geheugen toe te wijzen. De andere verschillen tussen hen worden hieronder in de vergelijkingstabel besproken:

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. Gevolgtrekking

Vergelijkingstabel

Basis voor vergelijkingnieuwmalloc ()
TaalDe operator new 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( )nieuw heeft de grootte van de operator niet nodig omdat het voldoende geheugen heeft voor een specifiek type malloc vereist dat de operator sizeof weet welke geheugengrootte hij moet toewijzen.
bouwer Nieuwe operator kan de constructor van een object aanroepen.malloc () kan helemaal geen constructor aanroepen.
initialisatieDe operator new kan een object initialiseren terwijl er geheugen aan wordt toegewezen.Geheugeninitialisatie kon niet worden gedaan in malloc.
overbelasting Nieuwe operator kan worden overbelast.De malloc () kan nooit worden overbelast.
MislukkingBij mislukking werpt operator nieuw een uitzondering.Bij mislukking retourneert malloc () een NULL.
vrijmakenDe geheugentoewijzing door nieuw, toegewezen met "delete".De geheugentoewijzing door malloc () wordt toegewezen met behulp van een free () -functie.
herverdelingDe nieuwe operator wijst het geheugen niet opnieuw toe.Geheugen toegewezen door malloc () kan opnieuw worden toegewezen met realloc ().
UitvoeringDe operator new snijdt de uitvoeringstijd.De malloc () vereist meer tijd voor uitvoering.


Definitie van nieuw

De operator nieuw is een geheugentoewijzingsoperator die geheugen dynamisch toewijst. De nieuwe operator wijst geheugen toe aan 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 de nieuwe operator is als volgt:

type variable_name = nieuw type (parameter_lijst);

Hier geeft "type" het gegevenstype 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 in het geheugen houdt. Het haakje hier geeft de aanroep van de constructor aan. De parameterlijst is de lijst met waarden die aan de constructor worden doorgegeven om het nieuw gebouwde object te initialiseren.


De nieuwe operator wijst voldoende geheugen toe voor een object van een specifiek type. Daarom is er geen operator sizeof () nodig en hoeft het geheugen niet te worden aangepast zoals malloc (), dat realloc () gebruikt om het geheugen opnieuw toe te wijzen. De nieuwe operator is een constructie; het roept de constructor van een object aan tijdens de declaratie die meestal 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 de nieuwe operator probeert het geheugen toe te wijzen, leidt dit tot een storing van de nieuwe operator. Als de nieuwe operator het geheugen niet toewijst, genereert het een uitzondering en als uw code die uitzondering niet kan verwerken, wordt het programma abnormaal beëindigd.

Het geheugen toegewezen door de operator new kan worden vrijgemaakt met de delete-operator. De nieuwe operator snijdt de uitvoeringstijd af omdat het een operator is, geen functie.

Definitie van malloc ()

De malloc () is een functie die wordt gebruikt om de gevraagde hoeveelheid geheugen op de heap toe te wijzen. De methode retourneert de aanwijzer van het type 'void' die verder is, typ cast om een ​​aanwijzer naar een geheugen van een bepaald type te krijgen en deze aanwijzer naar het 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 gegevenstype aan van de variabele waarvoor geheugen moet worden toegewezen. De variabele_naam is de naam van de referentievariabele waaraan de aanwijzer geretourneerd door malloc () zal worden toegewezen. Het (type *) beschrijft het type casting om een ​​pointer naar het geheugen van een specifiek type te verkrijgen. De grootte van () beschrijft malloc (), dat welke geheugengrootte vereist is.

De malloc () vereist type casting omdat de pointer die wordt geretourneerd door de malloc () van het lege type is, dus om een ​​type aan de pointer toe te wijzen, is type casting vereist. De grootte van () is vereist omdat de functie malloc () een onbewerkt geheugen toewijst. Daarom moet de functie malloc () worden verteld welke geheugengrootte moet worden toegewezen. Als het toegewezen geheugen niet voldoende is, kan het worden aangepast of opnieuw worden toegewezen met behulp van realloc ().

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

Het geheugen toegewezen door de functie malloc () wordt toegewezen met behulp van free (). Omdat functieaanroep leidt tot overhead, heeft malloc () meer tijd nodig voor uitvoering.

  1. De nieuwe operator is een constructie geïntroduceerd in C ++ en gebruikt in Java, C #, enz. 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 bepaald type, dus er is geen grootte-operator vereist. Aan de andere kant vereist de functie malloc () de operator sizeof () om de functie te laten weten welke geheugengrootte moet worden toegewezen.
  3. De nieuwe operator kan de constructor van het object tijdens het declareren aanroepen. 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 door de code moet worden afgehandeld, anders wordt het programma beëindigd. Aan de andere kant retourneert de functie malloc () een NULL-aanwijzer als deze geen geheugen toewijst. Als de aanwijzer wordt gebruikt zonder dit aan te vinken, leidt dit tot een systeemcrash.
  6. Het geheugen toegewezen met behulp van een nieuwe operator kan worden toegewezen met behulp van ‘delete’. Aan de andere kant kan het geheugen dat is toegewezen met de functie malloc () worden vrijgemaakt met behulp van free ().
  7. Nadat het geheugen is toegewezen met een nieuwe operator, kan het toch niet worden aangepast. Aan de andere kant kan het geheugen dat is toegewezen met de functie malloc () opnieuw worden toegewezen (aangepast) 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 is.

Gevolgtrekking:

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 ().