alloca()
alloue de la mémoire sur la pile plutôt que sur le tas, comme dans le cas de malloc()
. Donc, quand je reviens de la routine, la mémoire est libérée. Donc, en fait, cela résout mon problème de libération de mémoire allouée dynamiquement. La libération de la mémoire allouée malloc()
est un casse-tête majeur et si elle est manquée, elle entraîne toutes sortes de problèmes de mémoire.
Pourquoi est-il alloca()
déconseillé malgré les fonctionnalités ci-dessus?
free
(ce qui est évidemment un avantage) , l'impossibilité de l'inline (les allocations de tas sont évidemment beaucoup plus lourdes) et etc. La seule raison à éviter alloca
est pour les grandes tailles. Autrement dit, gaspiller des tonnes de mémoire de pile n'est pas une bonne idée, et vous avez également la possibilité d'un débordement de pile. Si tel est le cas - envisagez d'utiliser malloca
/freea
alloca
est que la pile ne peut pas être fragmentée comme le tas. Cela pourrait s'avérer utile pour les applications de style run-forever en temps réel, ou même pour les applications critiques pour la sécurité, car la WCRU peut ensuite être analysée statiquement sans recourir à des pools de mémoire personnalisés avec leur propre ensemble de problèmes (pas de localité temporelle, ressource sous-optimale utilisation).