La promotion d’entiers peut-elle affecter les performances 64 bits?

Prenez le code suivant par exemple:

uint32_t fg; uint32_t bg; uint32_t mask; uint32_t dest; ... dest = (fg & mask) | (bg & (~mask)); 

Maintenant, ce fragment a tous ses opérandes typés ints 32 bits non signés. En utilisant un compilateur C avec une taille int de 32 bits, aucune promotion d’entier n’aura lieu, l’opération est donc entièrement effectuée en 32 bits.

Mon problème est que, par exemple, sur Wikipédia, il est montré que même les machines 64 bits ont des compilateurs qui utilisent une taille int de 32 bits. Conformes à la norme C, ils ne promouvoiraient pas les opérandes au format 64 bits, ce qui réduirait potentiellement les performances et la taille du code probablement encore plus grande (à supposer que les opérations 16 bits coûtent plus cher un 32 bits x86).

La question principale est: dois-je être concerné? (Je crois que non, car avec les optimisations activées, un compilateur sensé pourrait peut-être omettre l’excès de gunk qui se présenterait si elle respectait ssortingctement le standard C. Veuillez consulter l’exemple de code précédent et penser en général où ma conviction peut en avoir moins sol)

Si tel est le cas (que je dois en fait être concerné), pourriez-vous recommander une méthode (livre, site, peu importe) qui couvre cette zone? (Eh bien, je sais que c’est un peu interdit pour SO, mais je le vois beaucoup moins utile si je n’obtenais que trois mots. Oui, vous le faites! Comme réponse à accepter)

Dois-je être concerné?

Non, pas vraiment. Le coût réduit de la lecture de la mémoire principale ou du disque dépasse généralement le coût supplémentaire associé à la réalisation d’opérations 32 bits dans des registres 64 bits. Un programme 64 bits utilisant des tableaux d’entiers 32 bits sera souvent plus rapide qu’un programme utilisant des tableaux d’entiers 64 bits.

Dans le même ordre d’idées, lors de la compilation, il est souvent préférable d’optimiser la taille que la vitesse, car les erreurs de cache coûtent souvent plus cher que les cycles cpu enregistrés.