Ce qui est plus rapide: l'allocation de Pile ou le Tas de répartition

Cette question peut sembler assez élémentaire, mais c'est un débat que j'ai eu avec un autre développeur qui travaillent avec moi.

J'ai été en prenant soin de pile allouer des choses où j'ai pu, au lieu de tas de leur attribution. Il était en train de parler de moi et regarder par-dessus mon épaule et a fait observer qu'il n'était pas nécessaire parce qu'ils sont de la même performance sage.

J'ai toujours été sous l'impression que la croissance de la pile de la constante de temps, et de l'allocation de tas de performance dépendait de la complexité actuelle du tas pour les deux allocation (pour trouver un trou de la bonne taille) et de l'allocation (l'effondrement des trous afin de réduire la fragmentation, comme de nombreux standard de la bibliothèque implémentations de prendre le temps de le faire pendant supprime si je ne me trompe pas).

Ce qui me frappe comme quelque chose qui serait probablement très dépendant du compilateur. Pour ce projet en particulier, je suis à l'aide d'un Metrowerks compilateur pour le PPC architecture. Aperçu sur cette combinaison serait la plus utile, mais en général, pour GCC, et MSVC++, ce qui est le cas? Est d'allocation de tas pas aussi performante que l'allocation de pile? Il n'y a pas de différence? Ou sont les différences afin de minute, il devient inutile de micro-optimisation.

  • pourquoi ne pas simplement remplacer les vides e; avec quelque chose comme int j=i; qui permettrait de faire en sorte que l'allocation de pile n'a lieu.
  • l'allocation de pile est beaucoup plus rapide.
  • Je sais que c'est assez ancien, mais il serait agréable de voir certains C/C++ extraits montrant les différents types de répartition.
  • Votre vache droits est terriblement ignorants, mais le plus important qu'il est dangereux parce qu'il fait autorité réclamations à propos de choses qu'il est terriblement ignorants à ce sujet. D'accise ces personnes de votre équipe le plus rapidement possible.
  • Notez que le tas est généralement beaucoup plus grande que la pile. Si vous êtes affecté de grandes quantités de données, vous avez vraiment de le mettre sur le tas, ou bien changer la taille de la pile de l'OS.
  • Toutes les optimisations sont, à moins d'avoir des repères ou de la complexité des arguments prouvant le contraire, par défaut, inutile de micro-optimisations.
  • Je me demande si votre collègue a surtout Java ou C# de l'expérience. Dans ces langues, presque tout est allouées sur la pile sous le capot, ce qui pourrait conduire à de telles hypothèses.
  • Pertinents (pour n'importe quelle langue): Comment fonctionne la pile de travail en assembleur?. Quand on sait ce que la pile c'est que c'est assez évident, il n'existe aucun moyen d'allocation de tas peut être plus rapide.

InformationsquelleAutor Adam | 2008-10-02