C++ Comment allouer de la mémoire dynamiquement sur la pile?

Est-il un moyen pour allouer de la mémoire sur pile au lieu de tas? Je ne peux pas trouver un bon livre sur ce, quelqu'un ici a une idée?

  • Si vous voulez contrôler où un std::string ou std::vector alloue de la mémoire, cochez cette question: stackoverflow.com/questions/354442/...
  • rapidement allouer/libre temporaire de l'espace de travail?
  • Butterworth Exemple: vous devez allouer un certain montant variable de l'espace pour un tampon temporaire pendant que vous trier les sommets en fonction de la profondeur. Les sommets venir de l'exécution des données, de sorte que vous ne connaissez pas à l'avance combien vous aurez. Aussi, vous disposez d'un budget de 2 microsecondes pour l'ensemble de la fonction, et sur votre plate-forme de malloc() coûts de 1 microseconde.
  • Donc, il suffit de créer des objets locaux comme d'habitude - pas besoin d'installations spéciales.
  • Je ne pense pas que vous pouvez mettre en œuvre un allocateur qui utilise alloca. La mémoire allouée ne peut être utilisé à l'intérieur de la fonction qui alloue, de sorte que le tampon ne peut pas être retourné à partir de l'allocateur!
  • et si la fonction a besoin d'un petit, mais variable, le nombre d'objets temporaires? Vous pouvez utiliser un vector, mais si la fonction est appelée dans une boucle serrée, ce serait cool si la mémoire peut être rapidement allouée et libéré sans se soucier de la fragmentation.
  • La accepté de répondre à cette question n'implique pas alloca.
  • ce que l'OP a demandé implique nécessairement alloca.
  • Alors allouer un petit, mais le fixe, le nombre d'objets sur la pile. Si nous ne savons pas la limite supérieure, alloca va souffler de toute façon.
  • Il y a beaucoup de questions sur StackOverflow où la question posée n'est pas ce que l'interlocuteur réellement nécessaire.
  • bien sûr, mais qui introduit un supplément de nombre magique dans le code, et à la limite varie en fonction de la machine, les drapeaux de compilation, etc. (tout ce qui peut influencer la taille de la pile). Si je cultive les taille de la pile, j'aurais maintenant besoin de changer les 2 ensembles de paramètres: la taille de la pile et la limite codée en dur pour ma fonction.
  • std::queue et la récursivité peut-être en tant que cet objet est conçu pour être rapide continue d'allocation. Remarque en C++ new et delete sont utilisés pour l'allocation de tas peut-être cela devrait être ré-étiquetés comme C.
  • alloca est largement utilisé dans Microsoft Windows, pour chaîne temporaire de zones tampons pour la traduction entre UTF-16 et Windows ANSI.
  • J'ai été à la programmation Windows depuis la version 2.0 et ne l'ai jamais utilisé, ou vu utilisé.,
  • Je suppose que tous ces appels sont cachés dans les versions ANSI de la Win32API, puisque le noyau traite uniquement les versions Unicode.
  • André dit. En outre, pour votre propre usage, je me souviens de MFC et ATL définir un groupe de macros que le paquet de la allocaappels. Je peux regarder si tu veux, mais depuis que je sais que vous êtes assez bon, je ne perds pas de temps à ça pour le moment. Cheers,

InformationsquelleAutor Mark | 2011-06-13