alloc, malloc en alloca — Wat is het verschil?

Ik had de indruk dat allocain Objective-C (wanneer we [anyObject alloc]aanroepen, feitelijk de C-functie mallocimplementeert en het geheugen wordt in heap toegewezen, maar kon nergens het antwoord hiervoor vinden.

Ook tijdens het zoeken naar allocavond ik allocadat geheugen in de stapel toewijst. Als ik me niet vergis, wijst allocageheugen in heap toe om objecten te maken.

Dus, wat is het verschil tussen allocaen malloc(en alloca)? Kan iemand het samenvatten?


Antwoord 1, autoriteit 100%

Alloc()is geen standaard C-bibliotheekfunctie. Sommige oudere compilers en bibliotheken bevatten een <alloc.h>-bibliotheek die enkele geheugentoewijzingsfuncties biedt, maar dit is niet standaard. De Microsoft Visual C++ runtime bevat een functie Alloc()die enigszins lijkt op malloc(), maar deze maakt ook geen deel uit van de C-standaard.

malloc()wijst geheugen toe aan de procesheap. Geheugen toegewezen met malloc()blijft op de heap totdat het wordt vrijgemaakt met free().

alloca()wijst geheugen toe binnen het stackframe van de huidige functie. Geheugen dat is toegewezen met behulp van alloca()zal van de stapel worden verwijderd wanneer de huidige functie terugkeert. alloca()is beperkt tot kleine toewijzingen.

Situaties waarin alloca()van toepassing is, zijn zeldzaam. In bijna alle situaties moet u malloc()gebruiken om geheugen toe te wijzen.


Antwoord 2

De functie allocawordt gebruikt om een regio of blok van grootte bytes toe te wijzen in de lengte van de heap.

De functie mallocwordt gebruikt om heap-opslag toe te wijzen. De naam staat voor geheugentoewijzing.


Antwoord 3

Ik herinner me de woordelijke verklaring uit het boek C++ Primer niet meer, maar er is een groot verschil tussen de functies. Nieuw in C++ wijst bijvoorbeeld geheugen toe, maar construeert ook de gegevens in het geheugen. De std::allocator wijst geheugen toe, maar roept geen enkele constructor aan. Hetzelfde geldt voor deze C-functies. Men wijst toe, maar construeert niet. Men wijst toe en construeert.

Other episodes