Question Systèmes 32 bits ou 64 bits


Quelles sont les différences entre les systèmes 32 bits et 64 bits?

Si vous les avez utilisés tous les deux, quelles différences marquantes avez-vous vécues?

Serait-ce un problème d'utiliser des programmes 32 bits sur des systèmes 64 bits dans certains cas?


219
2017-10-17 11:14


origine


Il y a beaucoup de confusion ici, et sinon, sur le Web, entre l'adressage physique (accès à RAM), PEA affecte cela, la carte mère affecte cela et l'adressage logique (mémoire virtuelle par processus). Sur un OS 32 bits, la mémoire virtuelle est limitée à 4 Go moins ce que réserve le noyau. Il est indépendant de la RAM, vous pourriez avoir 0,1 Mo ou 8 Go de RAM et vous auriez exactement 4 Go de mémoire virtuelle (mais certains réservés par le noyau). PEA peut être utilisé pour avoir plus de RAM, mais ce n’est pas une réponse parfaite car le noyau NE PEUT PAS y accéder. - ctrl-alt-delor


Réponses:


Remarque: ces réponses s'appliquent aux processeurs PC standard basés sur x86 (Intel et AMD) et Windows (configurés généralement pour les utilisateurs finaux). D'autres puces 32 bits ou 64 bits, d'autres systèmes d'exploitation et d'autres configurations de système d'exploitation peuvent avoir des compromis différents.

D'un point de vue technique, un système d'exploitation 64 bits vous offre:

  • Permet aux processus individuels de traiter plus de 4 Go de RAM chacun (dans la pratique, la plupart des systèmes d'exploitation 32 bits, mais pas tous, limitent la RAM système utilisable à moins de 4 Go, et pas uniquement au maximum par application).

  • Tous les pointeurs prennent 8 octets au lieu de 4 octets. L'effet sur l'utilisation de la RAM est minime (car il est peu probable qu'une application soit remplie de gigaoctets de pointeurs), mais dans le pire des cas, le cache du processeur peut contenir 1/2 pointeurs ce soit effectivement 1/2 de la taille). Pour la plupart des applications, ce n'est pas énorme.

  • Il existe de nombreux autres registres de CPU à usage général en mode 64 bits. Les registres sont la mémoire la plus rapide de votre système. Il n'y a que 8 en mode 32 bits et 16 registres généraux en mode 64 bits. Dans les applications de calcul scientifique que j'ai écrites, j'ai pu augmenter les performances de 30% en recompilant en mode 64 bits (mon application pourrait vraiment utiliser les registres supplémentaires).

  • La plupart des systèmes d'exploitation 32 bits permettent uniquement aux applications individuelles d'utiliser 2 Go de RAM, même si 4 Go sont installés. En effet, l’autre espace d’adresse de 2 Go est réservé au partage de données entre applications, avec le système d’exploitation et à la communication avec les pilotes. Windows et Linux vous permettront d'ajuster ce compromis à 3 Go pour les applications et à 1 Go partagé, mais cela peut poser des problèmes à certaines applications qui n'attendent pas le changement. Je devine aussi que cela pourrait paralyser une carte graphique qui a 1 Go de RAM (mais je ne suis pas sûr). Un système d'exploitation 64 bits permet aux applications 32 bits individuelles d'être plus proches des 4 Go complets avec lesquels jouer.

Du point de vue de l'utilisateur:

  • La vitesse d'application est généralement plus rapide pour une application 64 bits dans un système d'exploitation 64 bits par rapport à la version 32 bits de l'application sur un système d'exploitation 32 bits, mais la plupart des utilisateurs ne verront pas cette accélération. La plupart des applications destinées aux utilisateurs normaux ne tirent pas vraiment parti des registres supplémentaires ou les avantages sont compensés par des indicateurs plus importants remplissant le cache.

  • Si vous avez des applications de mémoire (comme les éditeurs de photos, le traitement vidéo, le calcul scientifique, etc.), si vous avez (ou pouvez acheter) plus de 3 Go de RAM, et que vous pouvez obtenir une version 64 bits de l'application, le choix est simple: utilisez le système d'exploitation 64 bits.

  • Certains matériels ne disposent pas de pilotes 64 bits. Vérifiez votre carte mère, toutes les cartes d'extension et tous les périphériques USB avant de procéder au changement. Notez que dans les premiers jours de Windows Vista, il y avait beaucoup de problèmes avec les pilotes. Ces jours-ci, les choses vont généralement mieux.

  • Si vous exécutez autant d'applications à un moment où vous êtes à court de mémoire vive (généralement, vous pouvez le dire car votre ordinateur commence à être très lent et que vous entendez le crunching du disque dur), alors vous voudrez un système d'exploitation 64 bits (et suffisamment de RAM).

  • Vous pouvez exécuter des applications 32 bits (mais pas des pilotes) dans Windows 64 bits sans aucun problème. Le pire ralentissement que j'ai mesuré pour une application 32 bits sous Windows 64 bits est d'environ 5% (ce qui signifie que si 60 secondes étaient nécessaires pour faire quelque chose dans Windows 32 bits, cela prenait au plus 60 * 1,05 = 65 secondes). la même application 32 bits dans Windows 64 bits).

Qu'est-ce que 32 bits vs 64 bits ne pas impliquer:

Sur les systèmes x86, 32 bits et 64 bits directement fait référence à la taille des pointeurs. C'est tout.

  • Il ne se réfère pas à la taille du C int type. C'est décidé par l'implémentation particulière du compilateur, et la plupart des compilateurs populaires choisissent 32 bits int sur les systèmes 64 bits.

  • Ce ne est pas directement se référer à la taille des registres non pointeurs normaux. Cependant, l'utilisation de registres arithmétiques 64 bits nécessite que l'application et le système d'exploitation s'exécutent également en mode pointeur 64 bits.

  • Ce ne est pas directement se référer à la taille du bus d'adresse physique. Par exemple, un système avec des lignes de cache de 64 bits de large et un maximum de 512 Go de mémoire ne nécessite que 33 bits dans son bus d’adresse (c.-à-d. log2(512*1024**3) - log2(64) = 33).

  • Il ne fait pas référence à la taille du bus de données physique: cela concerne davantage les coûts de fabrication (nombre de broches dans le socket du processeur) et la taille des lignes de cache.


262
2017-10-17 13:11



Très bonne réponse. Surtout parce que vous avez noté qu'il n'y a pas réellement de limite de RAM de 4 Go, mais une limite d'utilisation de la mémoire de processus. Juste pour votre information, je pense que vous devriez jeter un oeil à ce lien: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN - Breakthrough
Ce sont des applications qui ne fonctionnent pas sur une fenêtre 64 bits: les applications 16 bits / celles qui utilisent des pilotes en mode noyau 32 bits ou non signés. C'est beaucoup pour un logiciel comme moi ... - fluxtendu
@flextendu, compte tenu des exigences de performances de ces anciens programmes, vous pourriez presque certainement les exécuter sur une machine virtuelle. Avec VMware Player, Virtual PC et Virtual Box, il n’ya aucune raison de ne pas essayer l’un d’eux si vous possédez une licence Windows 32 bits. Si vous ne voulez pas jouer avec cela, ils fonctionneront probablement sous "Windows XP Mode". - Mark Booth
BTW, les applications 32 bits n'utiliseront pas plus de 2 Gio de RAM sauf si un indicateur spécifique est activé dans leur manifeste. La source: blogs.technet.com/b/markrussinovich/archive/2008/11/17/... - Hello71
Oui, je suis sûr que Hello71 a trouvé quelque chose d'assez important qui n'est pas traité ici: la plupart des applications 32 bits ne tireront jamais directement parti de la mémoire vive supplémentaire. Je pense que cela mérite d'être mentionné, non? - Django Reinhardt


En gros, vous pouvez tout faire à plus grande échelle:

  1. RAM par OS: Limite de RAM de 4 Go sur x86 pour le système d'exploitation (la plupart du temps)
  2. RAM par processus: Limite de RAM de 4 Go sur x86 pour les processus (toujours). Si vous pensez que ce n’est pas important, essayez d’exécuter une application intensive de base de données MSSQL. Il utilisera> 4 Go lui-même si vous l'avez disponible et fonctionne beaucoup mieux.
  3. Adresses: Les adresses sont 64bits au lieu de 32bits vous permettant d'avoir des programmes "plus gros" qui utilisent plus de mémoire.
  4. Poignées disponibles pour les programmes: Vous pouvez créer plus de descripteurs de fichiers, de processus, ... Exemple sur Windows x64, vous pouvez créer> 2000 threads par processus, mais sur x86 près de quelques centaines.
  5. Programmes plus larges disponibles: À partir d'un x64, vous pouvez exécuter les programmes x86 et x64. (Exemple de fenêtres: wow64, windows32 sur émulation windows64)
  6. Options d'émulation: A partir d'un x64, vous pouvez exécuter des machines virtuelles x86 et x64.
  7. Plus rapide: Certains calculs sont plus rapides sur un processeur 64 bits
  8. Division de plusieurs ressources système: Une grande quantité de mémoire RAM est très importante lorsque vous souhaitez exécuter au moins une machine virtuelle qui divise vos ressources système.
  9. Programmes exclusifs disponibles: Plusieurs nouveaux programmes ne supportent que x64. Exemple Exchange 2007.
  10. Futur obsolète x86 ?: Au fil du temps, de plus en plus de 64 bits seront utilisés et de plus en plus de x86 ne seront pas utilisés. Les fournisseurs ne prendront donc en charge que 64 bits de plus.

Les deux grands types d'architectures 64 bits sont les architectures x64 et IA64. Mais le x64 est de loin le plus populaire.

x64 peut exécuter des commandes x86 ainsi que des commandes x64. IA64 exécute également les commandes x86, mais ne fait pas les extensions SSE. Il existe du matériel dédié sur Itanium pour exécuter les instructions x86; c'est un émulateur, mais en matériel.

Comme @Phil l'a mentionné, vous pouvez obtenir un aperçu plus profond de comment ça marche ici.


107
2017-09-25 12:19



Euh IA64 exécute les commandes x86. Il ne fait pas les extensions SSE, cependant. Il existe du matériel dédié sur Itanium pour exécuter les instructions x86; c'est un émulateur, mais en matériel. - tzot
Il y a quelques années, Raymond Chen a publié un article sur la «limite» du thread 2000, et c'est plus ou moins une légende urbaine: blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx - bk1e
Votez pour Arstechnica pour leur explication. - Avihu Turzion
La limite de RAM de 4 Go n’est pas tout à fait vraie (c’est plutôt une limite artificielle imposée aux systèmes Windows des utilisateurs domestiques), vérifiez PAE. Avec le matériel le plus récent, un noyau Linux PAE (qui est utilisé par défaut pour 32 bits) peut très bien traiter plus de 4 Go. Même chose pour FreeBSD et NetBSD. - Izzy
Les systèmes 32 bits ne peuvent pas utiliser plus de 4 Go (1ère ponctuation) à cause de cela "adresses" (3ème ponctuation) .Parce que le numéro 32bit le plus élevé est 4.294.967.296 (= 4Go). Donc, vos premier et troisième points sont les mêmes. Vous pouvez supprimer le 3ème coup. :) - Jet


Le plus gros impact que les gens remarqueront en ce moment est qu’un PC 32 bits ne peut traiter qu’un maximum de 4 Go de mémoire. Lorsque vous retirez de la mémoire allouée à d’autres utilisations par le système d’exploitation, votre PC n’a probablement qu’à afficher environ 3,25 Go de mémoire utilisable. Passez à 64 bits et cette limite disparaît.

Si vous faites un développement sérieux, cela pourrait être très important. Essayez de lancer plusieurs machines virtuelles et vous manquez de mémoire rapidement. Les serveurs ont plus de chances d’avoir besoin de mémoire supplémentaire et vous constaterez que l’utilisation de 64 bits est beaucoup plus importante sur les serveurs que sur les ordinateurs de bureau. La loi de Moore garantit que nous aurons toujours plus de mémoire sur les machines et, à un certain moment, les ordinateurs de bureau passeront également en mode 64 bits.

Pour une description plus détaillée des différences de processeur, consultez cet excellent article de ArsTechnica.


46
2017-09-25 12:16



La plate-forme 32 bits et la limitation de 4 Go sont quelque peu trompeuses et constituent (étaient) principalement une limite de choix / conception architecturale du système d'exploitation. En réalité, les 4 Go à partir de 32 bits sont vraiment limités dans un espace VA de processus. L'adresse physique prend en charge 36 bits sur les processeurs Intel 32 bits - Tall Jeff
Vous faites un bon argument, ce qui est certainement vrai. Mais l’impact dans le monde réel des utilisateurs de PC est que la machine ne va pas utiliser les 4 Go complets qu’ils ont payés. Mon père avait ce problème et est toujours confus que les 4 Go qu'il a payés ne peuvent pas être pleinement utilisés.
Appréciez votre point de vue, mais en essayant simplement de faire croire que le correctif n'est pas dans le processeur ou en 64 bits, il s'agit simplement d'une conception légèrement améliorée du système d'exploitation. Cela concerne, par exemple, les versions d'entreprise de Windows, même dans les versions 32 bits. Il permet 64 Go de RAM. - Tall Jeff
Techniquement, la limite ne disparaît pas. Il se déplace plus loin où il est impossible / impossible d'installer autant de RAM sur une machine à tout moment au cours de la prochaine décennie.
Voir ma remarque sur PAE ci-dessus: la limite de 4 Go n'est pas vraie pour tout le système - mais ne s'applique qu'à des processus uniques (aucun processus ne peut accéder à 4 Go et plus - mais l'ensemble du système, tous processus confondus, peut être activé). Donc, à moins d'avoir des applications qui peuvent accéder à 4 Go et plus (tels que des éditeurs / convertisseurs vidéo avec de gros fichiers vidéo) et 8 Go + installé, il ne devrait pas faire beaucoup de différence que ce soit en utilisant 32 bits ou 64 bits. - Izzy


Rien n'est gratuit: bien que les applications 64 bits pouvez accéder à plus de mémoire que les applications 32 bits, l'inconvénient est qu'ils avoir besoin plus de mémoire. Tous les pointeurs qui avaient besoin de 4 octets, maintenant ils en ont besoin de 8. Par exemple, la configuration par défaut dans Emacs est de 60% de mémoire en plus lorsqu'elle est conçue pour une architecture 64 bits. Cette empreinte supplémentaire nuit aux performances à tous les niveaux de la hiérarchie de la mémoire: les plus gros exécutables sont plus longs à charger à partir du disque, les grands ensembles de travail entraînent plus de pagination et les plus gros objets Si vous pensez à un processeur avec un cache 16K L1, une application 32 bits peut fonctionner avec 4096 pointeurs avant qu’il ne passe et passe au cache L2 mais une application 64 bits doit atteindre le cache L2 après seulement 2048 pointeurs.

Sur x64, cela est atténué par les autres améliorations architecturales, comme plus de registres, mais sur PowerPC, si votre application ne peut pas utiliser> 4G, elle sera probablement plus rapide sur "ppc" que "ppc64". Même sur Intel, il existe des charges de travail plus rapides sur x86, et quelques-unes plus rapides que 5% sur x64 que x86.


31
2017-10-13 10:45



Cette réponse suggère que PowerPC64 n'est pas aussi performant que x86-64. La vérité est que powerpc64 n'a pas amélioré powerpc, car powerpc n'était pas cassé. - ctrl-alt-delor
Linux a maintenant un ABI x32, avec tous les avantages de la vitesse de x86-64 (plus de registres, ABI repensé), mais avec des pointeurs de 32 bits. +1 pour souligner que les avantages du mode 64 bits ne sont pas liés à l'augmentation de la largeur réelle, mais à la possibilité de laisser tomber une grande partie des bagages qui retenaient l'architecture. Les registres 64 bits ont une valeur pour certaines applications, mais l'espace de pointeur 64 bits est moins souvent nécessaire. - Peter Cordes


Un système d'exploitation 64 bits peut utiliser plus de RAM. C'est à ce sujet, dans la pratique. Vista / 7 64 bits utilisent des fonctions de sécurité plus sophistiquées pour les endroits où ils placent des composants vitaux dans la mémoire vive, mais cela n’est pas vraiment «perceptible» en tant que tel.

De ChrisInEdmonton:

Un système d'exploitation 32 bits sur un ix86   système avec PAE peut adresser jusqu'à 64   Go de RAM. Un système d'exploitation 64 bits   sur x86-64 peut accéder à 256 To de   espace d'adressage virtuel, même si cela peut   être élevé dans les processeurs ultérieurs, jusqu'à   à 16 EB. Notez que certains fonctionnant   les systèmes limitent l'espace d'adressage   plus loin, et la plupart des cartes mères   avoir des restrictions supplémentaires.


19
2017-10-17 11:24



Pour un système d'exploitation, 32 bits par rapport à 64 bits SEULEMENT fait référence à la taille des pointeurs (ce que votre premier paragraphe traite correctement). -1: certains systèmes d'exploitation choisissent de verrouiller la taille d'entier par défaut à la taille du pointeur, mais ni Windows ni Linux ne le font. La précision mathématique entière est inchangée. AUCUN système d'exploitation largement utilisé ne modifie la précision en virgule flottante (ce que dit le deuxième paragraphe). "float" ou "single" est 32 bits, "double" est 64 bits, que le système d'exploitation utilise des pointeurs 32 bits ou 64 bits. - Mr Fooz
Ah, je me suis trompé, merci d'avoir clarifié ça :) - Phoshi
Aucun problème. -1 -> +1 - Mr Fooz
Peut-être intéressant de modifier votre réponse pour indiquer la quantité de RAM accessible. Un système d'exploitation 32 bits sur un système ix86 avec PAE peut adresser jusqu'à 64 Go de RAM. Un système d'exploitation 64 bits sur x86-64 peut accéder à 256 To d'espace d'adressage virtuel, bien que cela puisse être augmenté dans les processeurs suivants, jusqu'à 16 EB. Notez que certains systèmes d'exploitation limitent davantage l'espace d'adressage et que la plupart des cartes mères auront des restrictions supplémentaires. - ChrisInEdmonton
Je voulais garder les choses simples, car les chiffres sont la plupart assez élevé pour être hors de propos pour le moment, mais il ne peut pas faire de mal de les coller maintenant. - Phoshi


Je ne suis pas sûr de pouvoir répondre à toutes vos questions sans écrire un essai complet (il y a toujours Google ...), mais vous n'avez pas besoin de concevoir vos applications différemment pour le 64 bits. Je pense que ce dont on parle, c'est que vous devez faire attention à des choses comme la taille des pointeurs ne sont plus la même taille que la taille en pouces. Et vous avez tout un tas de problèmes potentiels avec des hypothèses intégrées sur certains types de données de quatre octets de long, ce qui peut ne plus être vrai.

Cela risque de tromper toutes sortes de choses dans votre application, qu'il s'agisse de sauvegarder / charger depuis un fichier, d'une itération dans les données, d'un alignement de données ou d'opérations binaires sur des données. Si vous avez un code existant que vous essayez de transférer, ou que vous travaillez sur les deux, il est probable que vous aurez beaucoup de petits problèmes à résoudre.

Je pense que c'est un problème d'implémentation plutôt qu'un problème de conception. C'est à dire. Je pense que le "design" de dire, un paquet de retouche photo sera le même quel que soit le libellé. Nous écrivons du code qui compile les versions 32 bits et 64 bits, et la conception ne diffère certainement pas entre les deux - c'est la même base de code.

Le "big deal" fondamental sur 64 bits est que vous accédez à un espace d’adresse mémoire beaucoup plus grand que 32 bits. Cela signifie que vous pouvez réellement insérer plus de 4 Go de mémoire dans votre ordinateur et faire réellement la différence.

Je suis sûr que d'autres réponses iront dans les détails et bénéficieront plus que moi.

En termes de détection de la différence, il suffit de vérifier par programme la taille d’un pointeur (par exemple sizeof (void *)). La réponse à 4 signifie ses 32 bits, et 8 signifie que vous utilisez un environnement 64 bits.


14
2017-09-25 12:29



Si vous écrivez des programmes qui supposent que certains types de pointeurs ont la même taille que certains types intégraux, vous pouvez le faire. Cela est vrai depuis longtemps. - David Thornley
@ David: Vous avez absolument raison. Malheureusement, il y a une tonne de code qui fait exactement cela.


Un processus 32 bits a un espace d'adressage virtuel de 4 Go; cela pourrait être trop peu pour certaines applications. Une application 64 bits a un espace d'adressage pratiquement illimité (bien sûr, elle est limitée, mais vous n'allez probablement pas atteindre cette limite).

Sur OSX, il y a d'autres avantages. Voir le article suivantPourquoi le noyau s'exécute-t-il dans un espace d'adressage de 64 bits (que votre application s'exécute en 64 ou 32) ou que votre application s'exécute dans un espace d'adressage de 64 bits (alors que le noyau est toujours de 32 bits)? Pour résumer: si l'un des deux est 64 bits (noyau ou application, ou les deux, bien sûr), le TLB ("translation lookaside buffer") n'a pas besoin d'être vidé chaque fois que vous passez du noyau pour utiliser space and back accès RAM).

Vous avez également des gains de performance lorsque vous travaillez avec des variables "long long int" (variables 64 bits comme uint64_t). Un processeur 32 bits peut ajouter / diviser / soustraire / multiplier deux valeurs de 64 bits, mais pas dans une seule opération matérielle. Au lieu de cela, il doit diviser cette opération en deux (ou plus) opérations 32 bits. Ainsi, une application qui fonctionne beaucoup avec des nombres de 64 bits aura un gain de vitesse grâce à sa capacité à effectuer des calculs 64 bits directement dans le matériel.

Enfin, l'architecture x86-64 offre plus de registres que les architectures x86 classiques. Travailler avec des registres est beaucoup plus rapide que de travailler avec de la RAM et plus le processeur a de registres, moins il a besoin de permuter les valeurs de registre en RAM et de revenir aux registres.

Pour savoir si votre processeur peut fonctionner en mode 64 bits, vous pouvez examiner différentes variables sysctl. Par exemple. ouvrir un terminal et taper

sysctl machdep.cpu.extfeatures

S'il répertorie EM64T, votre CPU prend en charge l'espace d'adressage 64 bits conformément à la norme x86-64. Vous pouvez aussi chercher

sysctl hw.optional.x86_64

Si vous indiquez 1 (true / enabled), votre CPU prend en charge le mode binaire x86-64. Si vous indiquez 0 (faux / désactivé), ce n'est pas le cas. Si le paramètre n'est pas trouvé, considérez-le comme faux.

Remarque: Vous pouvez également récupérer des variables sysctl depuis une application C native, inutile d'utiliser l'outil de ligne de commande. Voir

man 3 sysctl

10
2017-09-25 12:34



erreur: "machdep.cpu.extfeatures" est une clé inconnue
Je suppose que cela ne s’appelle pas EM64T, aussi, si vous n’êtes pas assez malheureux pour avoir des informations.