J'ai lu récemment, dans un article sur la programmation de jeux écrit en 1996, que l'utilisation de variables globales est plus rapide que le passage de paramètres.
Est-ce que cela a toujours été vrai et si oui, est-ce encore vrai aujourd'hui?
J'ai lu récemment, dans un article sur la programmation de jeux écrit en 1996, que l'utilisation de variables globales est plus rapide que le passage de paramètres.
Est-ce que cela a toujours été vrai et si oui, est-ce encore vrai aujourd'hui?
Réponse à court - Non, les bons programmeurs font des code d'aller plus vite en connaissant et en utilisant les outils appropriés pour le travail, et puis l'optimisation de façon méthodique où leur code ne répond pas à leurs exigences.
Plus de réponse - Cet article, qui à mon avis n'est pas particulièrement bien écrit, n'est en aucun cas des conseils généraux sur le programme d'accélération mais "15 façons de le faire plus rapidement blits'. L'extrapolation de cette pour le cas général, est absent de l'écrivain point, ce que vous pensez au fond de l'article.
Si j'étais à la recherche de la performance des conseils, je mettrais zéro de la crédibilité dans un article qui ne permet pas d'identifier ou de présenter un seul concrètes de changement de code pour soutenir les affirmations contenues dans le code d'exemple, et sans ce qui suggère que la mesure, le code pourrait être une bonne idée. Si vous n'allez pas, pour montrer comment faire le code mieux, pourquoi l'inclure?
Certains des conseils d'années de retard - LOIN des pointeurs cessé d'être un problème sur le PC il y a longtemps.
Un jeu sérieux pour les développeurs (ou tout autre programmeur professionnel, d'ailleurs) aurait un bon rire sur des conseils comme ceci:
Vous pouvez soit prendre le valoir de complètement, ou vous pouvez simplement ajouter un
#define NDEBUG
lors de la compilation de la version finale.
Mon conseil pour vous, si vous voulez vraiment de juger de la valeur de l'une de ces 15 conseils, et comme l'article 14 ans, serait de compiler le code dans un cadre moderne compilateur (Visual C++ 10 dire) et d'essayer d'identifier les zones où l'utilisation d'une variable globale (ou l'un des autres trucs) permettrait de le rendre plus rapide.
[Plaisanter - mon conseil serait d'ignorer cet article complètement et demander spécifique des questions de performances sur un Débordement de Pile que vous avez touché à des problèmes dans votre travail que vous ne pouvez pas résoudre. De cette façon, les réponses seront examinées par des pairs, pris en charge par l'exemple de code ou de bonnes preuves externes, et le courant.]
Lorsque vous changez les paramètres pour les variables globales, l'une des trois choses peuvent se produire:
Vous aurez à mesurer les performances de voir ce qui est plus rapide dans un non-trivial de cas concrets. Ce fut le cas en 1996, est vrai aujourd'hui et c'est vrai pour demain.
Laissant la performance de côté pour un moment, de variables globales dans un grand projet d'introduire des dépendances qui ont presque toujours faire de la maintenance et des tests beaucoup plus difficile.
Lorsque vous essayez de trouver des utilisations légitimes de variables globales les variables pour des raisons de performances, aujourd'hui, je suis très d'accord avec les exemples dans Preet réponse: très souvent, les variables nécessaires à l'microcontrôleur programmes ou pilotes de périphériques. Le cas extrême est un processeur de registre qui est exclusivement dédié à la variable globale.
Lorsque le raisonnement à propos de la performance de variables globales contre la transmission de paramètres, la manière dont le compilateur met en œuvre est pertinente. Les variables globales sont généralement stockés à des emplacements fixes. Parfois, le compilateur génère un adressage direct pour accéder à la globals. Parfois, cependant, le compilateur utilise encore une indirection et utilise une sorte de table de symboles de variables globales. Autant que je me souvienne de gcc pour AIX a fait cela il y a 15 ans. Dans ce contexte, les variables globales de petits types de ont toujours été plus lent que les habitants et passage de paramètres.
D'autre part, un compilateur peut passer des paramètres en appuyant sur la pile, en les passant dans des registres ou un mélange des deux.
Tout le monde a déjà la mise en garde des réponses à ce sujet étant plateforme et un programme spécifique, ayant besoin de réellement mesurer les timings, etc. Donc, avec tous déjà dit, permettez-moi de répondre à votre question directement pour le cas spécifique de la programmation de jeux sur x86 et PowerPC.
En 1996, il y avait certains cas où poussant les paramètres sur la pile a pris les instructions supplémentaires et pourrait causer une brève stand à l'intérieur du PROCESSEUR Intel pipeline. Dans ces cas, il pourrait être une très petite accélération à partir d'éviter la transmission de paramètres purement et simplement et de lecture de données à partir littérale adresses.
Ce n'est pas plus vrai sur les architectures x86 ou sur le PowerPC utilisé dans la plupart des consoles de jeu. À l'aide de variables globales est généralement plus lent que le passage de paramètres pour deux raisons:
Que voulez-vous dire, "plus vite"?
Je sais pour un fait, que la compréhension d'un programme avec des variables globales me prend beaucoup plus de temps que l'autre sans.
Si le temps supplémentaire qu'il faut le programmeur(s) est moins que le temps gagné par les utilisateurs lorsqu'ils exécutent le programme global, je dirais que l'aide globale est plus rapide.
Mais pensez que le programme doit être exécuté par 10 personnes une fois par jour pendant 2 ans. Et qu'il faut 2.84632 secondes sans globals et 2.84217 secondes avec globals (un 0.00415 sec augmentation). C'est 727 secondes moins du TOTAL de l'exécution. Gagner 10 minutes de temps d'exécution n'est pas la peine de l'introduction d'un mondial en ce qui concerne le temps du programmeur.
Dans une certaine mesure, tout code évitant les instructions du processeur (c'est-à-dire un code plus court) sera plus rapide . Cependant combien plus vite? Pas très! Notez également que les stratégies d'optimisation du compilateur peuvent de toute façon réduire le code.
À l’heure actuelle, il s’agit uniquement d’une optimisation d’applications très spécifiques, généralement des pilotes extrêmement critiques ou du code de micro-contrôle.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.