Le portage de 32 bits de code C++ à 64 bits - est-il utile? Pourquoi?
Je suis au courant de certains des avantages évidents de l'architecture x64 plus élevé (plus de RAM disponible adresses, etc)... mais:
- Que faire si mon programme n'a pas de réel besoin pour s'exécuter en 64 bits natif de mode. Dois-je port il de toute façon?
- Y sont prévisibles délai pour mettre fin à 32 bits?
- Mon application s'exécutent plus rapidement /mieux /plus sécurisé que natif de code x64?
- Si c'est simple à faire (Juste la recompilation de votre code C++) le faire, c'est agréable.
- J'ai porté beaucoup d'applications sur x64 (comme mon shell extensions), c'est la valeur des thats en question pour les applications qui ne nécessitent pas d'elle. Pour la plupart des applications (chacun, je n'ai jamais porté), il n'est pas aussi simple que juste de le recompiler.
- quels sont les problèmes en particulier, avez-vous avoir à les porter à x64? Si vous avez d'importants problèmes, alors il se peut que la conception originale n'était pas trop bon (comme dans de trop nombreux à l'architecture des hypothèses spécifiques et/ou des "hacks").
- Ce système d'exploitation? Si c'est Windows, puis de nombreux utilisateurs ne seront pas en mesure d'exécuter votre application, parce que la plupart des utilisateurs n'ont pas 64-bit de Windows. Si c'est OS X, puis aller de l'avant; aujourd'hui, OS X est un mélange de 32-bits et 64-bits déjà.
- L'ajout de Jesper: vous pouvez Vous attendre à Apple baisse de 32 bits de soutien dans quelques années. De nouvelles bibliothèques sont déjà en 64 bits uniquement.
- Je dirais que décent 32bit soutien va durer jusqu'en 2025. Il ne sera probablement pas abandonné jusqu'en 2038 est trop proche pour le confort.
- en supposant que les autres plate-forme, ressemble à Apple oblige plus tôt si vous utilisez leur plate-forme.
Vous devez vous connecter pour publier un commentaire.
x86-64 est un peu un cas particulier - pour de nombreuses architectures (par exemple. SPARC), la compilation d'une application 64 bits mode n'est pas donner à tout avantage à moins rentable d'utiliser plus de 4 go de mémoire. Il ne fait qu'augmenter la taille du binaire, ce qui peut rendre le code plus lent si elle a un impact sur le cache de comportement.
Cependant, x86-64) vous donne plus que juste une version 64 bits de l'adresse de l'espace et entier de 64 bits des registres - il aussi double le nombre de registres, qui, sur un registre déficientes l'architecture comme x86 peut entraîner une augmentation significative des performances, grâce à une simple recompilation.
Il vous permet également de le compilateur supposer que de nombreuses extensions, comme le SSE et SSE2, sont présents, ce qui peut également améliorer de manière significative le code d'optimisation.
Un autre avantage est que x86-64 ajoute PC-adressage relatif, ce qui peut considérablement simplifier indépendant de la position du code.
Toutefois, si l'application n'est pas sensible aux performances, alors rien de tout cela est vraiment important que ce soit.
Un bénéfice possible, je n'ai pas vu encore mentionné, c'est qu'il pourrait découvrir latente de bugs. Une fois que vous port pour 64-bit, un certain nombre de modifications sont apportées. Les tailles de certains types de changement, la convention d'appel changements, à l'exception d'un mécanisme de gestion (au moins sous Windows) des changements.
Tout cela pourrait conduire à des cachées bugs de revêtement de surface, ce qui signifie que vous pouvez les corriger.
En supposant que votre code est correct et sans bug, le portage 64-bit devrait en théorie être aussi simple que de feuilleter un commutateur de compilateur. Si cela échoue, c'est parce que vous êtes en s'appuyant sur des choses pas garanti par la langue, et si, ils sont des sources potentielles d'erreurs.
Voici ce 64-bit pour vous:
J'ai porté un certain nombre de C++ apps et vu environ 10% de l'accélération avec la version 64 bits de code (même système, même compilateur, le seul changement est un 32 bits vs compilateur 64 bits mode), mais la plupart de ces applications ont été de faire une bonne quantité de calcul 64 bits. YMMV.
Je ne voudrais pas vous inquiéter de la prise en charge 32 bits pour demain.
(Modifié pour inclure les notes de commentaires - merci!)
Même si il est vrai que le 32 bits sera autour pendant un certain temps sous une forme ou sous une autre, Windows Server 2008 R2 est livré avec une version 64 bits de SKU uniquement. Je ne serais pas surpris de voir WOW64 comme une option d'installation dès que Windows 8 comme de plus en plus de logiciels migre vers 64 bits. WOW64 est un installer des, de la mémoire et des performances. Les 3.5 GO de RAM limite de 32 bits de Windows avec l'augmentation de la RAM densités encouragera cette migration. Je préfère avoir plus de RAM que de CPU...
Embrasser 64 bits! Prenez le temps de faire votre code 32 bits en 64-bits, c'est une évidence et simple. Pour les applications normales, les changements sont plus précisément décrit comme des corrections de code. Pour les conducteurs, le choix est: s'adapter ou de perdre des utilisateurs. Lorsque vient le temps que vous serez prêt à déployer sur toute plate-forme avec une recompilation.
De l'OMI, l'actuel cache des problèmes sont hypothétiques; silicium améliorations dans ce domaine et 64 bits d'optimisation est à venir.
Rico Mariani post sur pourquoi Microsoft n'est pas portage de Visual Studio 64 bits, vraiment, il résume Visual Studio: Pourquoi il n'y a pas de version 64 bits? (encore)
Cela dépend si votre code est une application ou une bibliothèque réutilisable. Pour une bibliothèque, gardez à l'esprit que le client de la bibliothèque peuvent avoir de bonnes raisons pour fonctionner en mode 64 bits, donc vous devez vous assurer que votre scénario fonctionne. Cela peut également s'appliquer pour les applications lorsqu'elles sont extensibles via des plugins.
Si vous n'avez pas besoin maintenant, et probablement ne le sera jamais, pour le mode 64 bits, vous ne devriez pas faire le portage.
Si vous n'avez pas besoin maintenant, mais peut-être un jour, vous devriez essayer d'estimer combien d'efforts il sera (par exemple, en tournant sur tous les avertissements du compilateur, et de tenter une version 64 bits de compilation). S'attendre à ce que certaines choses qui ne sont pas trivial, de sorte qu'il sera utile de savoir quels sont les problèmes que vous rencontrez, et combien de temps il serait susceptible de prendre pour les corriger.
Avis que l'un besoin peut également résulter de dépendances: si votre programme est une bibliothèque (par exemple, une DLL), il peut être nécessaire de port pour 64-bit de mode juste parce que certains d'accueil de l'application est porté.
Pour un avenir prévisible, les applications 32 bits continueront à être pris en charge.
À moins qu'il y est une raison pour aller en 64 bits, alors il n'y a pas de réel "besoin" à l'appui de 64 bits.
Cependant, il ya quelques bonnes raisons pour passer à 64 bits, à un certain point, à l'exclusion de tous ceux que d'autres ont déjà mentionné.
Il est de plus en plus difficile d'acheter des Pc qui ne sont pas en 64 bits. Même si les 32 bits d'une application en mode de compatibilité pour les années à venir, tous les nouveaux Pc vendus aujourd'hui ou dans l'avenir sont susceptibles d'être en 64 bits. Si j'ai un brillant système d'exploitation 64 bits je n'ai pas vraiment envie de courir "smelly vieux de 32 bits des applications" dans le mode de compatibilité!
Certaines choses, il suffit de ne pas fonctionner correctement dans comptibility mode, c'est pas la même chose que courir sur un 32-bit sur le matériel 32 bits. J'ai quelques questions (par exemple, accès au registre à travers la 32/64 bits du registre de l'urticaire, des programmes qui échouent parce qu'ils ne sont pas dans le dossier, ils s'attendent à être en, etc) lors de l'exécution en mode de compatibilité. Je me sens toujours nerveux au sujet de l'exécution de mon code en mode de compatibilité - c'est tout simplement "pas la vraie chose", et il se montre souvent.
Si vous avez écrit votre code proprement, alors les chances sont vous n'avez qu'à le recompiler en 64 bits exe et ça marchera très bien, donc il n'y a pas vraiment de raison de ne pas lui donner un essai.
le plus tôt vous construire un natif de la version 64 bits, le plus il sera facile de continuer à fonctionner sur une version 64 bits comme vous ajouter de nouvelles fonctionnalités. C'est un bien meilleur plan que de continuer à se développer dans les âges sombres de l'autre 'n' années, puis en essayant de sauter dans la lumière.
Quand vous allez pour votre prochaine entrevue d'emploi, vous serez en mesure de dire que vous avez 64 bits expeirence et 32->64 portage de l'expérience.
Vous sont déjà au courant de la x64 avantages (surtout l'augmentation de la taille de la RAM) et vous n'êtes pas intéressé à tout, alors ne pas le port d'un fichier exécutable (exe). Généralement, les performances se dégradent après un port, en raison principalement de l'augmentation de la taille d'un x64 module sur x86: tous les pointeurs maintenant exiger le double de la longueur, et cela s'infiltre partout, y compris du code de la taille (quelques sauts, des appels de fonction, vtables, virtuel invoque, les symboles globaux etc etc). N'est pas de dégradation significative, mais est généralement mesurables (de 3 à 5% diminution de la vitesse, dépend de nombreux facteurs).
Dll valent le portage parce que vous bénéficiez d'un nouveau "public" en x64 applications qui sont capables de consommer votre DLL.
Certains logiciels libres ou les configurations sont pas en mesure d'exécuter des programmes 32 bits. Un Linux minimal sans 32 bits libc installé par exemple. Aussi autant que je me souvienne j'ai l'habitude de compiler le support 32 bits à partir du noyau.
Si ces systèmes d'exploitation ou les configurations sont une partie de votre potentiel de base de l'utilisateur, alors oui, vous devriez le porter.
Si vous avez besoin de plus de vitesse, alors vous devriez également port (comme d'autres l'ont dit, x86-64 a plus de registres et de refroidir les instructions que l'accélérer).
Ou, bien sûr, si vous voulez mmap() ou autre carte d'un fichier volumineux ou beaucoup de mémoire. Puis 64 bits permet de.
Par exemple, si vous aviez écrit le code 32 bits (GNU C/++) comme ci-dessous
EDIT: le code de format
pour la messagerie réseau, alors vous devez faire de portage, tout en re-compiler sur un système 64 bits, en raison de htonl/ntohl etc, la communication s'était brisé dans le cas du réseau de pairs est encore en utilisant le système 32 bits (en utilisant le même code que le vôtre); vous savez sizeof(long) sera modifié à partir de 32 à 64 trop à vos côtés.
Voir plus de notes sur 32/64 portage à http://code.google.com/p/effocore/downloads/list, le nom du document EffoCoreRef.pdf.
Il est assez peu probable que vous auriez voir aucun avantage, sauf si vous êtes dans le besoin d'une extrême mesures de sécurité ou d'obscène quantités de RAM.
Fondamentalement, vous auriez probablement savoir intuitivement si votre code est un bon candidat pour la version 64 bits de portage.
Concernant les délais impartis. Je voudrais vous inquiétez pas, des choses comme 32bit sera autour pendant un bon moment en mode natif et pour un avenir prévisible, dans une autre forme.
Voir ma réponse à cette question ici. je clos ce post en disant qu'un ordinateur 64 bits permet de stocker et de récupérer beaucoup plus d'informations que sur un ordinateur 32 bits. Pour la plupart des utilisateurs, ce n'est pas vraiment dire grand chose parce que les choses comme la navigation sur le web, consulter ses e-mails et jouer au Solitaire tous à l'aise de travailler dans les limites de l'adressage 32 bits. Où le 64 bits prestation ne brillent vraiment, c'est dans les zones où vous avez beaucoup de données à l'ordinateur aura à produire par le biais de. Traitement numérique du signal, gigapixel de la photographie et de l'avancée du jeu en 3D sont autant de domaines où leurs énormes quantités de données de traitement serait de voir un gros coup de pouce dans un environnement 64 bits.
Que votre code s'exécute plus vite ou mieux, c'est entièrement à votre code et les exigences qui leur sont imposées.
À des problèmes de performances, cela dépend de votre programme. Si votre programme est pointeur-intensif, le portage 64 bits peut causer des performances de déclassement, depuis pour de cache du PROCESSEUR avec la même taille, chaque 64-bit pointeur occupent plus d'espace sur le cache, et physiques et virtuels mappages occupe également de plus TLB l'espace. Sinon, si votre programme n'est pas un pointeur-d'œuvre, ses performances vont bénéficier de x64.
Bien sûr, la performance n'est pas la seule raison pour le portage, d'autres problèmes comme le portage de l'effort, de temps lors de la planification devrait également être envisagée.
Je recommanderais portage 64 bits, de sorte que vous êtes en cours d'exécution "native" (Aussi, je l'utilise OpenBSD. Dans leur portage AMD64, ils ne fournissent aucune émulation 32 bits de soutien, tout doit être en 64 bits)
Aussi,
stdint.h
est votre meilleur ami! Par le portage de votre application, vous devez apprendre à coder de façon portable. Qui feront de votre code de travail de droit lorsque nous avons 128 bits des processeurs de trop (dans quelques décennies, espérons-le)Je l'ai porté 2 ou 3 choses à 64 bits, et maintenant développer pour les deux (ce qui est très facile si vous utilisez stdint.h) et sur mon premier projet de portage 64 bits causé 2 ou 3 bugs, mais qu'il a été. Plus de il était une simple recompilation et maintenant, je ne vous inquiétez pas sur les différences entre les versions 32 et 64 bits lors de la prise de nouveau code, parce que je viens automatiquement le code de façon portable. (à l'aide de intptr_t et size_t et tel)
Dans le cas d'une dll appelée à partir d'une version 64 bits de processus, alors les dll doivent être 64 bits ainsi.
Alors il n'importe pas si ça vaut le coup, vous n'avez pas le choix.
Une seule question à garder à l'esprit est le logiciel de bibliothèques disponibles. Par exemple, mon entreprise se développe une application qui utilise plusieurs bibliothèques OpenGL, et nous le faisons sur la OpenSuSE OS. Dans les anciennes versions de l'OS, on peut télécharger une des versions 32 bits de ces bibliothèques sur l'architecture x86_64. Des versions plus récentes, cependant, n'ont pas cette. Elle l'a fait plus facile de compiler en mode 64 bits.
64 bits fonctionnera beaucoup plus rapide, lors de la 64 bits de compilateurs à devenir matures, mais quand ça va se produire, je ne sais pas