Unterschied zwischen new und malloc ()

Autor: Laura McKinney
Erstelldatum: 1 April 2021
Aktualisierungsdatum: 5 Kann 2024
Anonim
new vs. malloc (C++ for Data Abstraction)
Video: new vs. malloc (C++ for Data Abstraction)

Inhalt


Sowohl new als auch malloc () werden verwendet, um den Speicher dynamisch zuzuweisen. New und malloc () unterscheiden sich jedoch in vielen Punkten. Der Hauptunterschied zwischen new und malloc () besteht darin, dass Neu ist der Operator, der als Konstrukt verwendet wird. Auf der anderen Seite die malloc () ist eine Standardbibliotheksfunktion, mit der Speicher zur Laufzeit zugewiesen wird. Die anderen Unterschiede werden unten in der Vergleichstabelle erläutert:

  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle

Grundlage für den VergleichNeumalloc ()
SpracheDer Operator new ist eine spezielle Funktion von C ++, Java und C #. Die Funktion malloc () ist ein Merkmal von C.
Natur"new" ist ein Operator.malloc () ist eine Funktion.
Größe von( )new benötigt den Operator sizeof nicht, da er für einen bestimmten Typ genügend Speicherplatz zur Verfügung stellt Bei malloc muss der Operator sizeof wissen, welche Speichergröße zugeordnet werden soll.
Konstrukteur Der Operator new kann den Konstruktor eines Objekts aufrufen.malloc () kann überhaupt keinen Konstruktor aufrufen.
InitialisierungDer Operator new kann ein Objekt initialisieren und ihm gleichzeitig Speicher zuweisen.Die Speicherinitialisierung konnte in malloc nicht durchgeführt werden.
Überlastung Operator new kann überladen werden.Das malloc () kann niemals überladen werden.
FehlerBei einem Fehler löst operator new eine Ausnahme aus.Bei einem Fehler gibt malloc () NULL zurück.
FreigabeDie Speicherbelegung durch neue, mit "Löschen" freigegebene.Die Speicherzuweisung durch malloc () wird mit einer free () -Funktion freigegeben.
NeuzuteilungDer neue Operator weist keinen neuen Speicher zu.Speicher, der von malloc () zugewiesen wird, kann mit realloc () neu zugewiesen werden.
AusführungDer Operator new verkürzt die Ausführungszeit.Das malloc () benötigt mehr Zeit für die Ausführung.


Definition von neu

Der Betreiber Neu ist ein Speicherzuweisungsoperator, der Speicher dynamisch zuweist. Der neue Operator ordnet Speicher im Heap zu und gibt die Startadresse des Speichers zurück, der einer Referenzvariablen zugewiesen ist. Der neue Operator ähnelt dem malloc () in C. Der C ++ - Compiler ist jedoch mit malloc () kompatibel. Es ist jedoch am besten, den neuen Operator zu verwenden, da er bestimmte Vorteile gegenüber malloc () hat. Die Syntax des neuen Operators lautet wie folgt:

Typ Variablenname = neuer Typ (Parameterliste);

Hier bezeichnet "Typ" den Datentyp der Variablen, für die der Speicher zugewiesen werden muss. Das Wort "Variablenname" ist der Name der Referenzvariablen, die den Zeiger auf den Speicher enthält. Die Klammer gibt hier den Aufruf des Konstruktors an. Die parameter_list ist die Liste der Werte, die an den Konstruktor übergeben werden, um das neu erstellte Objekt zu initialisieren.


Der neue Operator weist genügend Speicher zu, der für ein Objekt eines bestimmten Typs erforderlich ist. Daher ist weder ein sizeof () -Operator erforderlich, noch muss die Größe des Speichers geändert werden, wie bei malloc (), das realloc () verwendet, um den Speicher neu zuzuweisen. Der neue Operator ist ein Konstrukt. Es ruft den Konstruktor eines Objekts während der Deklaration auf, die im Allgemeinen zum Initialisieren des Objekts verwendet wird.

Wir wissen, dass der neue Operator den Speicher im Heap zuweist und die Größe des Heaps begrenzt ist. Wenn auf dem Heap nicht genügend Speicher vorhanden ist und ein neuer Operator versucht, den Speicher zuzuweisen, führt dies zum Ausfall des neuen Operators. Wenn der neue Operator den Speicher nicht zuordnen kann, wird eine Ausnahme ausgelöst. Wenn Ihr Code diese Ausnahme nicht verarbeiten kann, wird das Programm abnormal beendet.

Der vom Operator new zugewiesene Speicher kann mit dem Operator delete freigegeben werden. Der neue Operator verkürzt die Ausführungszeit, da er ein Operator und keine Funktion ist.

Definition von malloc ()

Das malloc () ist eine Funktion, mit der die angeforderte Speichermenge auf dem Heap zugewiesen wird. Die Methode gibt den Zeiger vom Typ "void" zurück, der außerdem vom Typ cast stammt, um einen Zeiger auf einen Speicher eines angegebenen Typs zu erhalten, und dieser Zeiger auf den Speicher wird einer Referenzvariablen zugewiesen. Die Funktion malloc () ähnelt dem neuen Operator in C ++, da sie zum dynamischen Zuweisen von Speicher verwendet wird. Das malloc () ist eine Standardbibliotheksfunktion. Die Syntax der Funktion malloc () lautet wie folgt:

Typ Variablenname = (Typ *) malloc (sizeof (Typ));

Hier gibt "Typ" den Datentyp der Variablen an, für die Speicher zugewiesen werden muss. Der Variablenname ist der Name der Referenzvariablen, der der von malloc () zurückgegebene Zeiger zugewiesen wird. Der (Typ *) beschreibt das Typ-Casting, um einen Zeiger auf den Speicher eines bestimmten Typs zu erhalten. Die sizeof () beschreibt malloc (), welche Speichergröße benötigt wird.

Das malloc () erfordert eine Typumwandlung, da der von malloc () zurückgegebene Zeiger vom Typ void ist. Um dem Zeiger einen Typ zuzuweisen, ist eine Typumwandlung erforderlich. Die sizeof () ist erforderlich, da die Funktion malloc () einen unformatierten Speicher zuweist. Daher muss der malloc () -Funktion mitgeteilt werden, welche Speichergröße zugeordnet werden muss. Wenn der zugewiesene Speicher nicht ausreicht, kann er mit realloc () in der Größe geändert oder neu zugewiesen werden.

Die Funktion malloc () weist Speicher auf dem Heap zu. Falls der Heap nicht genügend Speicher hat, gibt die Funktion malloc () einen NULL-Zeiger zurück. Daher sollte die Referenzvariable, die den von malloc () zurückgegebenen Zeiger enthält, vor der Verwendung überprüft werden, da sie sonst zu einem Systemabsturz führen kann.

Der von der Funktion malloc () zugewiesene Speicher wird mit free () freigegeben. Da der Funktionsaufruf zu einem Overhead führt, benötigt malloc () mehr Zeit für die Ausführung.

  1. Der neue Operator ist ein Konstrukt, das in C ++ eingeführt und in Java, C # usw. verwendet wird. Auf der anderen Seite ist malloc () eine Standardbibliotheksfunktion, die nur in C-Sprache vorhanden ist und von C ++ unterstützt wird.
  2. Der neue Operator reserviert genügend Speicher für das Objekt eines angegebenen Typs, sodass kein Größenoperator erforderlich ist. Andererseits erfordert die Funktion malloc (), dass der Operator sizeof () der Funktion mitteilt, welche Speichergröße sie zuordnen muss.
  3. Der neue Operator kann den Konstruktor des Objekts während der Deklaration aufrufen. Andererseits kann die Funktion malloc () den Konstruktor nicht aufrufen.
  4. Der Operator "new" könnte überladen sein, malloc () jedoch nicht.
  5. Wenn der neue Operator den Speicher nicht zuordnen kann, wird eine Ausnahme ausgelöst, die vom Code behandelt werden muss, damit das Programm nicht beendet wird. Auf der anderen Seite gibt die Funktion malloc () einen NULL-Zeiger zurück, wenn kein Speicher zugewiesen werden kann. Wenn der Zeiger verwendet wird, ohne dies zu überprüfen, führt dies zu einem Systemabsturz.
  6. Der mit einem neuen Operator zugewiesene Speicher kann mit "Löschen" freigegeben werden. Andererseits kann der mit der Funktion malloc () zugewiesene Speicher mit free () freigegeben werden.
  7. Sobald der Speicher mit einem neuen Operator zugewiesen wurde, kann die Größe nicht mehr geändert werden. Andererseits kann der mit der Funktion malloc () zugewiesene Speicher mit der Funktion realloc () neu zugewiesen (in der Größe geändert) werden.
  8. Die Ausführungszeit von new ist im Vergleich zu malloc () kürzer, da malloc eine Funktion und new ein Konstrukt ist.

Fazit:

Die Funktion malloc () ist die alte Methode, um den Speicher dynamisch zuzuweisen. Heutzutage wird der neue Operator verwendet, um den Speicher zur Laufzeit zuzuweisen, da er gegenüber malloc () bestimmte Vorteile hat.