Was ist der Unterschied zwischen malloc und allocate?

8

Ich bin auf einen Code gestoßen, der allocate ausgiebig verwendet. Zum Beispiel

%Vor%

Ich habe noch nie allocate verwendet und daher die Frage, was ist der Unterschied zwischen malloc und allocate?

Ein Unterschied, den ich feststellen kann, obwohl ich mir über seinen Vorteil nicht im Klaren bin, ist, dass malloc rohen Speicher gibt, wo es wie reserviert erscheinen wird, aber ich muss den Zeiger nicht auf einen bestimmten Typ umwandeln.

    
Jimm 13.06.2013, 15:04
quelle

3 Antworten

3

Von allocate documentation:

  

Ordnet n * sizeof(T) nicht initialisierten Speicher durch Aufrufen von ::operator new(std::size_t) zu, aber ist nicht angegeben, wann und wie diese Funktion aufgerufen wird .

Auch von diese Frage , können Sie sehen, dass new und malloc zu unterschiedlichen Ergebnissen führen.

    
md5 13.06.2013 15:07
quelle
3

Es scheint, dass der Unterschied darin besteht, dass Sie mit allocate nur die Anzahl der gewünschten Elemente und nicht die Gesamtgröße angeben müssen, und der Rückgabetyp wird automatisch in den richtigen Typ umgewandelt.

In C ++ sollten Sie fast nie beides verwenden, aber bevorzugen Sie new , das entsprechende Konstruktoren aufrufen wird.

    
Mark B 13.06.2013 15:34
quelle
0

Vom Konzept her machen diese beiden Funktionen genau dasselbe. Das einzige Mal, dass Sie einen Unterschied sehen, ist, wenn Sie "auf die Innenseite der Funktion schauen" oder Sie nicht genügend Speicher haben ( malloc wird NULL zurückgeben, da allocate Aufrufe ::new , es wird ein% geworfen co_de% Ausnahme).

Ich denke, es ist "besseres C ++", um bad_alloc zu verwenden (aus keinem anderen Grund als "Sie müssen nicht allocate casten").

Nachdem das gesagt wurde, wäre die Verwendung von allocate der normale Weg in C ++ und außerhalb von Orten, an denen Sie in ::new T[elements] übergeben haben, sollten Sie das tun.

    
Mats Petersson 13.06.2013 15:11
quelle

Tags und Links