alloc, malloc und alloca – Was ist der Unterschied?

Lesezeit: 3 Minuten

Benutzeravatar von Anindya Sengupta
Anindya Sengupta

Ich hatte den Eindruck, dass alloc in Objective-C (wenn wir aufrufen [anyObject alloc] implementiert tatsächlich C-Funktion malloc und der Speicher wird im Heap zugewiesen, konnte aber nirgendwo die Antwort dafür finden.

Auch bei der Suche nach allocIch fand alloca die Speicher im Stack zuweist. Wenn ich mich nicht irre, alloc weist Speicher im Heap zu, um Objekte zu erstellen.

Also, was ist der Unterschied zwischen alloc und malloc (und alloca)? Kann bitte jemand zusammenfassen?

alloc() ist keine Standard-C-Bibliotheksfunktion. Einige ältere Compiler und Bibliotheken enthalten eine <alloc.h> Bibliothek, die einige Speicherzuweisungsfunktionen bereitstellt, aber dies ist kein Standard. Die Microsoft Visual C++-Laufzeit enthält eine Alloc() Funktion, die etwas ähnlich ist malloc()aber auch das ist nicht Bestandteil des C-Standards.

malloc() weist Speicher auf dem Prozessheap zu. Speicher allokiert mit malloc() bleibt auf dem Heap, bis er mit freigegeben wird free().

alloca() weist Speicher innerhalb des Stapelrahmens der aktuellen Funktion zu. Speicher allokiert mit alloca() wird vom Stack entfernt, wenn die aktuelle Funktion zurückkehrt. alloca() ist auf kleine Zuteilungen beschränkt.

Situationen wo alloca() angemessen sind, sind selten. In fast allen Situationen sollten Sie verwenden malloc() Speicher zuzuweisen.

  • “Situationen, in denen alloca() angemessen ist, sind selten. In fast allen Situationen sollten Sie malloc() verwenden, um Speicher zuzuweisen.” Nicht alle alloca() stellt Arrays mit variabler Länge bereit. Es gibt keinen praktischen Unterschied zwischen int n = 6; double x[n]; und int n = 6; double *x = alloca( n * sizeof( *x ) ); Nicht nur das, die Verwendung von malloc() in Multithread-Programmen kann ein schwerwiegender Leistungsengpass sein.

    – Andreas Henle

    21. September 2015 um 1:24 Uhr


  • @AndrewHenle Ich habe nicht gesagt, dass es welche gibt nein Situationen wo alloca() Ist angemessen; Ich sagte, dass sie selten sind. VLAs sind ein Fall, in dem sie nützlich sind, aber selbst dort sind sie im Wesentlichen eine Optimierung. Da das OP eindeutig neu in der C-Programmierung ist, habe ich mich entschieden, nicht zu tief in die Details zu gehen. 🙂

    Benutzer149341

    21. September 2015 um 1:43 Uhr

  • @AnindyaSengupta In Ihrer Frage wurde Objective-C nicht erwähnt, daher habe ich das nicht als Möglichkeit in Betracht gezogen. Ja das +[NSObject alloc] Methode wird höchstwahrscheinlich aufrufen malloc()oder etwas funktional Äquivalentes.

    Benutzer149341

    21. September 2015 um 1:44 Uhr

  • @Andrew Henle, gibt es real praktischer Unterschied zw alloca und VLAs, wenn Sie in einer Schleife verwenden.

    – Ideengeber42

    21. September 2015 um 2:01 Uhr

  • hat das nicht erwähnt alloca() ist anscheinend BSD\GNU und gehört nicht zum Standard von C oder POSIX

    – Swift – Friday Pie

    19. Oktober 2019 um 22:09 Uhr

Benutzeravatar von Girish Singh rathore
Girish Singh rathore

Das alloc Die Funktion wird verwendet, um eine Region oder einen Block mit einer Größe von Bytes in der Länge von zuzuweisen heap.

Das malloc Funktion wird verwendet, um zuzuweisen heap Lagerung. Sein Name steht für Memory Allocation.

  • Bitte schauen Sie sich diese URL an, es wird praktisch sein, Ihre Qualität zu verbessern

    – Willie Cheng

    1. Juni 2016 um 22:57 Uhr

Ich erinnere mich nicht an die wörtliche Anweisung aus dem Buch C++ Primer, aber es gibt einen großen Unterschied zwischen den Funktionen. Beispielsweise weist new in C++ Speicher zu, konstruiert aber auch die Daten im Speicher. Der std::allocator weist Speicher zu, ruft aber keinen Konstruktor auf. Dasselbe gilt für diese C-Funktionen. Man ordnet zu, baut aber nicht. Man verteilt und konstruiert.

1389230cookie-checkalloc, malloc und alloca – Was ist der Unterschied?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy