La différence entre un logiciel 32 bits et un logiciel 64 bits réside dans la taille des pointeurs et peut-être aussi dans la taille des registres d'entiers. C'est ça.
Cela signifie que tous les indicateurs de votre programme sont deux fois plus grands. Et (au moins sur une architecture ILP32 / LP64), votre long
taille est également deux fois plus grande. Cela correspond généralement à une augmentation d'environ 30% de la taille du code de l'objet. Cela signifie que …
- le code de votre objet prendra environ 30% plus de temps à charger du disque dans la RAM
- votre code objet prendra environ 30% plus d'espace en mémoire
- vous avez effectivement réduit votre bande passante mémoire (pour le code objet) d'environ 20%
- vous avez effectivement réduit la taille du cache d'instructions d'environ 20%
Ceci a un effet négatif non négligeable sur les performances.
Cela n'a de sens que si vous pouvez "racheter" ces coûts de performance d'une manière ou d'une autre. En gros, il existe deux façons de procéder: vous faites beaucoup de calculs sur les nombres entiers de 64 bits ou vous avez besoin de plus de 4 mégaoctets de mémoire mappée. Si l'une ou les deux est vraie, il est logique d'utiliser un logiciel 64 bits, sinon ce n'est pas le cas.
Remarque: dans certaines architectures, il n’existe pas de variantes 32 ou 64 bits correspondantes. Dans ce cas, la question n'a évidemment aucun sens. Les plus connus sont IA64, qui n’est que 64 bits et n’a pas de variante 32 bits, et x86 / AMD64, qui sont, bien que étroitement liés, des architectures différentes , x86 n’ayant que 32 bits, AMD64 n’ayant que 64 bits.
En fait, cette dernière affirmation n’est plus vraie à 100%. Linux a récemment ajouté l’ABI x32, qui vous permet d’exécuter du code AMD64 avec des pointeurs 32 bits. Ainsi, même si ce n’est pas une architecture de processeur "correcte", c’est une façon d’utiliser l’architecture AMD64 de telle sorte qu’elle ait une architecture native. Variante 32 bits. Cela a été fait précisément parce que la surcharge de performances que j'ai mentionnée ci-dessus posait de véritables problèmes quantifiables et mesurables aux utilisateurs du monde réel exécutant du code réel dans des systèmes réels.