Empfohlen, 2024

Tipp Der Redaktion

Unterschied zwischen new und malloc ()

Mit new und malloc () wird der Speicher dynamisch zugewiesen. New und malloc () unterscheiden sich jedoch in vielen Zusammenhängen. Der Hauptunterschied zwischen new und malloc () besteht darin, dass new der Operator ist, der als Konstrukt verwendet wird. Auf der anderen Seite ist malloc () eine Standard-Bibliotheksfunktion, mit der zur Laufzeit Speicher zugewiesen wird. Die anderen Unterschiede zwischen ihnen werden in der Vergleichstabelle unten erläutert:

Vergleichstabelle

VergleichsgrundlageNeuMalloc ()
SpracheDer Operator new ist eine spezifische Funktion von C ++, Java und C #.Die Funktion malloc () ist eine Funktion von C.
Natur"neu" ist ein Operator.malloc () ist eine Funktion.
Größe von( )new benötigt nicht den Operator sizeof, da ihm genügend Speicher für einen bestimmten Typ zugewiesen wirdFür malloc muss der Operator sizeof wissen, welche Speichergröße er zuweisen muss.
KonstrukteurOperator new kann den Konstruktor eines Objekts aufrufen.malloc () kann überhaupt keinen Konstruktor aufrufen.
InitialisierungDer Operator new konnte ein Objekt initialisieren, während ihm Speicher zugewiesen wurde.Die Speicherinitialisierung konnte in Malloc nicht durchgeführt werden.
ÜberlastungOperator new kann überladen werden.Das Malloc () kann niemals überladen werden.
FehlerBei einem Fehler löst der Operator new eine Ausnahme aus.Bei einem Fehler gibt malloc () einen NULL zurück.
DeallocationDie Speicherzuordnung von new wird mit "delete" freigegeben.Die Speicherzuordnung von malloc () wird mit der Funktion free () freigegeben.
NeuzuteilungDer neue Operator weist den Speicher nicht neu zu.Durch malloc () zugewiesener Speicher 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 Operator new ist ein Speicherzuweisungsoperator, der Speicher dynamisch zuweist. Der neue Operator reserviert Speicher im Heap 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, aber es ist am besten, den neuen Operator zu verwenden, da er gewisse 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 hier gibt den Aufruf des Konstruktors an. Die Parameterliste ist die Liste der Werte, die an den Konstruktor übergeben werden, um das neu erstellte Objekt zu initialisieren.

Der neue Operator weist ausreichend Speicherplatz für ein Objekt eines bestimmten Typs zu. Daher ist weder ein sizeof () - Operator erforderlich, noch muss der Speicher wie malloc () verkleinert werden, der den Speicher mit realloc () neu zuordnet. Der neue Operator ist ein Konstrukt. Es ruft den Konstruktor eines Objekts während der Deklaration auf, der im Allgemeinen zum Initialisieren des Objekts verwendet wird.

Wir wissen, dass der neue Operator den Speicher im Heapspeicher zuordnet und die Größe des Heapspeichers begrenzt ist. Wenn der Heapspeicher nicht ausreicht und der neue 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 neu zugewiesene Speicherplatz kann mit dem Löschoperator freigegeben werden. Der neue Operator unterbricht die Ausführungszeit, da es sich um einen Operator und nicht um eine Funktion handelt.

Definition von malloc ()

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 weiter ist. Typ cast, 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 zur dynamischen Speicherzuordnung verwendet wird. Das Malloc () ist eine Standardbibliotheksfunktion. Die Syntax der Funktion malloc () lautet wie folgt:

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

Hier bezeichnet "Typ" den Datentyp der Variablen, 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 die Typumwandlung, um einen Zeiger auf den Speicher eines bestimmten Typs zu erhalten. Die sizeof () beschreibt malloc (), dh welche Speichergröße wird benötigt.

Malloc () erfordert eine Typumwandlung, da der von malloc () zurückgegebene Zeiger vom Typ void ist. Um dem Zeiger einen Typ zuzuweisen, ist Typumwandlung erforderlich. Die sizeof () ist erforderlich, da die Funktion malloc () einen Rohspeicher zuweist. Daher muss die Funktion malloc () angegeben werden, welche Speichergröße zugewiesen werden muss. Wenn der zugewiesene Speicher nicht ausreicht, kann er mit realloc () verkleinert oder neu zugewiesen werden.

Die Funktion malloc () reserviert Speicher auf dem Heap. Wenn der Heapspeicher dann nicht mehr ausreicht, gibt die Funktion malloc () einen NULL-Zeiger zurück. Daher sollte die Referenzvariable, die den von malloc () zurückgegebenen Zeiger enthält, überprüft werden, bevor sie verwendet wird. Andernfalls kann dies zu einem Systemabsturz führen.

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.

Hauptunterschiede zwischen new und malloc ()

  1. Der neue Operator ist ein in C ++ eingeführtes Konstrukt, das in Java, C # usw. verwendet wird. Auf der anderen Seite ist malloc () eine Standardbibliotheksfunktion, die nur in der C-Sprache vorhanden ist und von C ++ unterstützt wird.
  2. Der neue Operator weist ausreichend Speicher für das Objekt eines angegebenen Typs zu, sodass kein Größenoperator erforderlich ist. Andererseits erfordert die Funktion malloc (), dass der Operator sizeof () der Funktion mitteilt, welche Speichergröße zugewiesen werden muss.
  3. Der neue Operator kann während der Deklaration den Konstruktor des Objekts aufrufen. Andererseits kann die Funktion malloc () den Konstruktor nicht aufrufen.
  4. Der Operator 'new' könnte überladen sein, aber malloc () konnte nicht.
  5. Wenn der neue Operator den Speicher nicht zuordnen kann, wird eine Ausnahme ausgelöst, die vom Code behandelt werden muss, andernfalls wird das Programm beendet. Auf der anderen Seite gibt die Funktion malloc () einen NULL-Zeiger zurück, wenn der Speicher nicht zugeordnet werden kann. Wenn der Zeiger ohne Prüfung verwendet wird, führt dies zu einem Systemabsturz.
  6. Der mit einem neuen Operator zugewiesene Speicher kann mit 'delete' 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 des Speichers nicht geändert werden. Andererseits kann der mit der Funktion malloc () zugewiesene Speicher mit der Funktion realloc () neu zugewiesen (skaliert) 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 der alte Weg, den Speicher dynamisch zuzuweisen. Heutzutage wird der neue Operator zur Zuweisung des Speichers zur Laufzeit verwendet, da er einige Vorteile gegenüber malloc () hat.

Top