Salut, il y a quelques temps j'ai travaillé à l'école sur un assez gros projet d'optimisation en C++ dont l'objectif était donc de rendre un résultat qui soit le meilleur possible et le plus rapidement possible.
Je me souviens qu'au départ j'utilisais dans mon code des unsigned int chaque fois que j'étais sûr que ma valeur ne passerait pas (et ne devait pas passer) en dessous de 0. Et avec ce code là j'ai pu faire quelques tests qui me donnaient des résultats satisfaisant en temps d'exécution.
Et puis un jour, je ne sais plus pourquoi, j'ai décidé de remplacer mes unsigned int par des int. Et étrangement ce remplacement m'a offert un gain de performance en temps d'exécution assez remarquable.
A l'époque je ne m'étais pas trop posé de question, mais maintenant que j'ai un nouveau projet C++ je m'interroge. Est-ce que l'utilisation du type unsigned int oblige la réalisation de test de positivité ou quelque chose comme ça qui ralentirait l'exécution ? Ou bien est-ce que le compilateur (à l'époque g++ 4 avec -O2 sous Linux x64) parvient à réaliser certaines optimisations lorsqu'on utilise le type int au lieu du type unsigned int ?
Dans la même veine, est-ce que je risque de perdre en performance en utilisant du unsigned char au lieu du signed char, ou bien est-ce que l'utilisation du type short peut éventuellement être pénalisante en terme de temps d'exécution par rapport au type int ? En bref, comment le choix des types de base peut-il jouer sur la performance temporelle d'une application ?