93 votes

Les programmes 64 bits sont-ils plus gros et plus rapides que les versions 32 bits?

Je suppose que je suis en mettant l'accent sur x86, mais je suis généralement intéressés par le passage de 32 à 64 bits.

Logiquement, je peux voir que des constantes et des pointeurs, dans certains cas, sera plus grande si les programmes sont susceptibles d'être plus grande. Et le désir d'allouer de la mémoire sur les limites de word pour l'efficacité de la moyenne de plus d'espace blanc entre les allocations.

J'ai aussi entendu dire que les 32 bits mode sur le x86 a vider son cache lors de la commutation de contexte en raison du chevauchement de la 4G, les espaces d'adressage.

Alors, quels sont les réels avantages du 64 bits?

Et comme une question supplémentaire, serait de 128 bits-être encore mieux?

Edit:

Je viens d'écrire mon premier 32/64 bits programme. Il fait des listes liées/les arbres de 16 octets (32b) ou de 32 octets (version 64b) les objets et fait beaucoup d'impression sur la sortie stderr - pas vraiment un programme utile, et pas quelque chose de typique, mais c'est mon premier.

Taille: 81128(32b) v 83672(64b) - donc pas beaucoup de différence

Vitesse: 17s(32b) v 24s(64b) - en cours d'exécution sur 32 bits du système d'exploitation (OS X 10.5.8)

Mise à jour:

Je remarque qu'une nouvelle hybride x32 ABI (Application Binary Interface) est en cours d'élaboration qui est 64b mais utilise 32b pointeurs. Pour certains tests, il entraîne une moindre code et une exécution plus rapide que 32b ou 64b.

https://sites.google.com/site/x32abi/

50voto

Paul R Points 104036

Je constate généralement une amélioration de 30% de la vitesse d'utilisation du code à forte intensité de calcul sous x86-64 par rapport à x86. Ceci est probablement dû au fait que nous avons 16 registres à usage général 64 bits et 16 registres SSE au lieu de 8 registres à usage général 32 bits et 8 registres SSE. C’est avec le compilateur Intel ICC (11.1) sur un Linux x86-64 - les résultats avec d’autres compilateurs (par exemple gcc), ou avec d’autres systèmes d’exploitation (par exemple Windows), peuvent bien sûr être différents.

32voto

Suma Points 11966

Sauf si vous avez besoin d'accéder à plus de mémoire que 32b aborder permettra de vous, les avantages seront petits, le cas échéant.

Lors de l'exécution sur 64b CPU, vous obtenez la même interface de mémoire, peu importe si vous sont en cours d'exécution 32b ou 64b code (vous utilisez le cache même et même BUS).

Alors que l'architecture x64 a un peu plus de registres permet d'optimisations, ce qui est souvent contrecarrée par le fait que les pointeurs sont maintenant plus grand et à l'aide de toutes les structures avec des pointeurs résultats dans une plus grande mémoire de la circulation. Je voudrais estimer l'augmentation dans l'ensemble de l'utilisation de la mémoire pour un 64b application par rapport à un 32b un être autour de 15% à 30%.

18voto

Michael Aaron Safyan Points 45071

Quels que soient les avantages, je dirais que vous avez toujours compiler votre programme pour le système par défaut de la taille de mot (32 bits ou 64 bits), car si vous compiler une bibliothèque comme un binaire 32 bits, et de les fournir sur un système 64 bits, vous aurez la force de quelqu'un qui veut faire un lien avec votre bibliothèque pour fournir leur bibliothèque (et toutes les autres dépendances de la bibliothèque) comme un binaire 32 bits, quand la version 64 bits est la valeur par défaut disponible. Cela peut être tout à fait une nuisance pour tout le monde. En cas de doute, donner les deux versions de votre bibliothèque.

Comme pour les avantages pratiques de 64 bits... la plus évidente est que vous obtenez un plus grand espace d'adressage, donc si mmap un fichier, vous pouvez vous adresser à plusieurs à la fois (et de charger des fichiers de grande taille en mémoire). Un autre avantage est que, en supposant que le compilateur fait un bon travail d'optimisation, la plupart de vos opérations arithmétiques peuvent être mises en parallèle (par exemple, en plaçant deux paires de nombres de 32 bits dans les deux registres, et l'exécution de deux ajoute dans unique ajouter de l'opération), et grand nombre de calculs va fonctionner plus rapidement. Cela dit, l'ensemble de 64 bits vs 32 bits chose ne sera pas vous aider avec une complexité asymptotique du tout, donc si vous cherchez à optimiser votre code, vous devriez probablement être à la recherche sur les algorithmes plutôt que la constante des facteurs de ce genre.

EDIT:
Veuillez ne pas tenir compte ma déclaration sur le parallélisée plus. Ce n'est pas effectuée par un ordinaire ajouter une instruction... j'ai été source de confusion que certains de la vectorisé/instructions SSE. Une mesure plus précise des avantages, en dehors de l'espace d'adresses plus grand, c'est qu'il y a plus de registres, ce qui signifie plus de variables locales peuvent être maintenues dans le CPU fichier de registre, ce qui est beaucoup plus rapide d'accès, que si vous placez les variables dans la pile du programme (ce qui signifie généralement le cache L1).

4voto

Fahrenheit2539 Points 1809

De plus, toutes les versions récentes de Windows de serveur sont disponibles uniquement en 64 bits. Par conséquent, pour éviter les coûts (peu élevés) de virtualisation, toutes les applications conçues pour être exécutées sur des serveurs doivent être portées. Comme il s’agit généralement d’un projet volumineux de porter une application existante sans moyen facile d’estimer son coût, il peut être intéressant de réaliser une analyse statique qui repère spécifiquement les problèmes 64 bits lors de la phase de projet initiale. Prenons PVS-Studio comme exemple de cet outil.

2voto

Andrew McGregor Points 7641

Dans le cas spécifique de x68 à x68_64, le 64 bits du programme sera d'environ la même taille, si ce n'est un peu plus petit, un peu plus de mémoire, et de courir plus vite. C'est principalement parce que x86_64 n'avez pas 64 bits des registres, il a aussi deux fois plus nombreux. x86 n'a pas assez de registres pour s'langages compilés aussi efficaces qu'ils pourraient l'être, de sorte x86 code consacre beaucoup d'instructions et une bande passante mémoire de décalage de données entre les registres et la mémoire. x86_64 a beaucoup moins de cela, et donc il faut un peu moins d'espace et s'exécute plus rapidement. Virgule flottante et les bits de se tourner vecteur instructions sont également beaucoup plus efficace en x86_64.

En général, toutefois, les 64 bits de code n'est pas forcément plus rapide, et est généralement plus importante, à la fois pour le code et l'utilisation de la mémoire lors de l'exécution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X