Notez que addressspace peut être utilisé pour plus que de la mémoire (réelle). Il est également possible de mapper en mémoire des fichiers volumineux, ce qui peut améliorer les performances dans des configurations d’accès plus impaires, car la mise en cache de niveau de machine virtuelle plus puissante et plus efficace entre en jeu. Il est également prudent d’allouer des blocs de mémoire volumineux sur 64 bits, car susceptible de rencontrer une fragmentation de l’espace adresse qui ne lui permettra pas d’allouer un gros bloc.
Certaines des choses dites dans ce fil (comme le doublement des # registres) ne s'appliquent qu'à x86-> x86_64, pas à 64 bits en général. Tout comme le fait que sous x86_64, on garantisse SSE2, 686 opcodes et un moyen peu coûteux de faire de la PIC. Ces fonctionnalités ne concernent pas strictement les versions 64 bits, mais la suppression de l’héritage et la résolution des limitations connues de x86.
De plus, les gens citent souvent le doublement des registres comme étant la cause de l'accélération, alors que c'est plutôt l'utilisation par défaut de SSE2 qui fait l'affaire (accélération de la mémoire et autres fonctions similaires). Si vous activez le même ensemble pour x86, la différence est bien moindre. (*) (***)
N'oubliez pas non plus qu'une pénalité initiale est souvent impliquée, car la structure de données moyenne augmentera simplement parce que la taille d'un pointeur est plus grande. Cela a également des effets en cache, mais est plus significatif dans le fait que la moyenne memcpy () (ou quel que soit l'équivalent pour la copie de mémoire est dans votre langue) prendra plus de temps. Ce n'est que de l'ordre de quelques pour cent, mais les accélérations mentionnées ci-dessus le sont également.
Habituellement, le temps d’alignement est également plus important sur les architectures 64 bits (les enregistrements auparavant 32 bits deviennent souvent un mélange de valeurs 32 bits et 64 bits), ce qui fait exploser encore davantage les structures.
Globalement, mes tests simples indiquent qu’ils s’annuleront approximativement si les pilotes et les bibliothèques d’exécution sont totalement adaptés, ce qui ne donne aucune différence de vitesse significative pour l’application moyenne. Cependant, certaines applications peuvent devenir soudainement plus rapides (par exemple lorsqu'elles dépendent d'AES) ou plus lentes (une structure de données cruciale est constamment déplacée / scannée / parcourue et contient de nombreux pointeurs). Les tests portaient cependant sur Windows et l'optimalisation PIC n'était donc pas analysée.
Notez que la plupart des langages JIT-VM (Java, .NET) utilisent beaucoup plus de pointeurs en moyenne (en interne) que par exemple C ++. Leur utilisation de mémoire augmente probablement plus que pour le programme moyen, mais je n'ose pas assimiler cela directement à des effets de ralentissement (car ils sont vraiment complexes et géniaux et souvent difficiles à prédire sans mesurer)
Windows 64 bits utilise par défaut SSE2 pour la virgule flottante, ce qui semble accélérer les opérations simples et ralentir les opérations complexes (sin, cos, etc.).
(*) un fait peu connu est que le nombre de registres SSE double également en mode 64 bits
(**) Le Dr Dobbs a publié un bel article à ce sujet il y a quelques années.