web-dev-qa-db-fra.com

alloc, malloc et alloca - Quelle est la différence?

J'avais l'impression que alloc dans Objective-C (lorsque nous invoquons [anyObject alloc] implémente en fait la fonction C malloc et la mémoire allouée en tas, mais n'a trouvé nulle part la réponse à cela.

Aussi, lors de la recherche de alloc, j'ai trouvé alloca qui alloue de la mémoire dans la pile. Si je ne me trompe pas, alloc alloue de la mémoire en tas pour créer des objets.

Alors, quelle est la différence entre alloc et malloc (et alloca)? Quelqu'un peut-il résumer?

18
Anindya Sengupta

alloc() n'est pas une fonction de bibliothèque C standard. Certains compilateurs et bibliothèques plus anciens contiennent une bibliothèque <alloc.h> Qui fournit certaines fonctions d'allocation de mémoire, mais ce n'est pas standard. Le runtime Microsoft Visual C++ inclut une fonction Alloc() qui est quelque peu similaire à malloc(), mais cela ne fait pas non plus partie de la norme C.

malloc() alloue de la mémoire sur le tas de processus. La mémoire allouée à l'aide de malloc() restera sur le tas jusqu'à ce qu'elle soit libérée à l'aide de free().

alloca() alloue de la mémoire dans le cadre de pile de la fonction actuelle. La mémoire allouée à l'aide de alloca() sera supprimée de la pile au retour de la fonction actuelle. alloca() est limité à de petites allocations.

Les situations où alloca() est appropriée sont rares. Dans presque toutes les situations, vous devez utiliser malloc() pour allouer de la mémoire.

31
duskwuff

La fonction alloc est utilisée pour allouer une région ou un bloc d'octets de taille en longueur de heap.

La fonction malloc est utilisée pour allouer le stockage heap. Son nom signifie allocation de mémoire.

1

Je ne me souviens pas de la déclaration textuelle du livre C++ Primer, mais il y a une différence majeure entre les fonctions. Par exemple, new in C++ alloue de la mémoire, mais il construit également les données dans la mémoire. Le std :: allocator alloue de la mémoire, mais n'appelle aucun constructeur. Il en va de même pour ces fonctions C. On alloue mais ne construit pas. On alloue et construit.

0
Javene CPP McGowan