• [^] # Re: C++ type et performances

    Posté par . En réponse au message pre-realease de battle-rage un jeu de combat a la street fighter.. Évalué à 3.

    Sans répondre directement à ta question (qui demande une connaissance de l'architecture sous-jacente, x86 je suppose dans ton cas), quelques remarques:

    • premature optimization is the root of all evil. Dans ton cas, et vue la complexité des différentes couches utilisées par ton application, tu peux simplement arrêter de te poser la question car tu ne verras probablement pas la différence (sauf juste par curiosité, pour la beauté du geste ou pour apprendre :p)
    • mesure, mesure, mesure. toute spéculation ne vaut rien dans qu'elle n'a pas été mesurée.

    Sinon pour répondre à ta question de int signed vs unsigned, j'ai comparé la sortie de gcc des deux types d'addition, il n'y a aucune différence (merci la représentation en complément à 2)... "La vérification du signe" (je me demande bien ce que tu veux dire par là ??) est faite de manière automatique avec la mise à jour du registre des flags. Btw, le C est indéfini en ce qui concerne les overflows, donc bon si tu ne testes pas dans ton code, le compilo ne va pas rajouter du code par magie pour faire quelque chose d'indéfini. Ça peut par contre avoir une incidence sur l'optimisation de certains tests que tu aurais toi-même écrits. Genre si tu fais "if (x > 0)" avec x unsigned, le compilo peut supprimer le test (désolé pour cet exemple absurde je n'en ai pas de meilleur sous la main).

    En ce qui concerne la taille des données, "int" (signé ou non-signé) est sensé être la représentation la plus efficace pour le cpu cible. De plus, ce que tu vas gagner en utilisation mémoire tu risques de le perdre en faisant des accès non-alignés (bien que x86 semble moins pénalisant que d'autres archis). Aussi avec une représentation plus petite qu'un mot cpu, la différence signé vs non-signée a une incidence car le cpu doit faire une extension du bit de signe en fonction de l'instruction utilisée (je doute qu'un compilo émette facilement une addition sur 8bit). À voir donc...