64 bits, les Applications et dans la ligne d'Assemblage
Je suis à l'aide de Visual C++ 2010 développement d'applications windows 32 bits. Il y a quelque chose que je veux vraiment utiliser inline assemblée. Mais je viens de réaliser que visual C++ ne prend pas en charge assembly en ligne en 64 bits, les applications. De sorte que le portage à 64 bits dans l'avenir est un gros problème.
Je n'ai aucune idée de comment 64 bits, les applications sont différentes applications 32 bits. Est-il possible que les applications 32 bits qui devra être mis à niveau vers la version 64bit dans l'avenir? J'ai entendu dire que les Processeurs 64 bits ont plus les registres. Car la performance n'est pas un souci pour mes applications, à l'aide de ces registres n'est pas une préoccupation pour moi. Existe-il d'autres raisons qu'une application 32 bits doit être mis à niveau à la version 64bit? Serait un 64 bits processus de demande les choses différemment par rapport à une application 32 bits, à part que le 64 bits, les applications peuvent utiliser les registres ou les instructions qui sont uniques pour les Processeurs 64 bits?
Mon application a besoin d'interagir avec d'autres composants du système d'exploitation par exemple, les pilotes, qui, je le sais être 64 bits en 64 bits de windows. Mon application 32 bits compatible avec eux?
- Est-il vraiment si difficile de type "application"?
- il suffit de tourner l'assemblée en C++ et vous avez terminé
Since performance is not a concern for my applications
, pourquoi êtes-vous en utilisant assembly en ligne alors?- Passant: la raison en commun est des programmes qui créent dynamiquement le code, par exemple, la machine virtuelle runtimes/compilateurs JIT. Ils peuvent être en mesure de réécrire le code, ce qui est un peu plus difficile si vous ne connaissez pas le code qui était là avant. Mais les gens de l'écriture telles que des machines virtuelles ne serait probablement pas besoin de poser cette question - la déclaration "compilateurs mieux écrire assemblée que l'homme" ne s'applique pas pour les humains qui écrivent des compilateurs 😉
- Voir aussi Faire de l'assemblage de la fonction inline dans x64 Visual Studio. Si vous pouvez obtenir le compilateur Visual Studio/éditeur de liens pour insérer le autoportant ASM, alors il n'est pas une grande perte dans la pratique. Et peut-être Comment faire un nu de la fonction et de l'assembleur en ligne en x64 Visual C++.
Vous devez vous connecter pour publier un commentaire.
Visual C++ ne prend pas en charge assembly en ligne pour x64 (ou le BRAS) processeurs, parce que généralement, en utilisant assembly en ligne est une mauvaise idée.
Qui dépend de votre public cible. Si vous ciblez des serveurs, alors oui, il est raisonnable de permettre aux utilisateurs de ne pas installer le sous-système WOW64 car c'est un serveur -- vous savez que ce n'est probablement pas être en cours d'exécution trop de 32 bits de code. Je crois que Windows Server 2008 R2 permet déjà cela comme une option si vous l'installez comme "serveur de base" de l'instance.
64 bits n'a rien à voir avec les registres. Il a à voir avec la taille de la mémoire virtuelle adressable.
Le plus probable. Les applications 32 bits sont limités dans ce qu'ils ne peuvent pas la carte plus de choses que ~2 GO en mémoire à la fois. 64 bits, les applications n'ont pas ce problème. Même si elles ne l'utilisez pas plus de 4 go de mémoire physique, être capable de traiter plus de 4 go de mémoire virtuelle est utile pour la cartographie des fichiers sur le disque dans la mémoire et similaires.
Qui dépend entièrement de la façon dont vous êtes en communication avec ces pilotes. Si c'est par le biais de quelque chose comme un "nom de fichier de l'interface de votre application risque de rester 32 bits. Si vous essayez de faire quelque chose comme la mémoire partagée (Oups! De mémoire partagée accessible depuis le mode utilisateur avec un chauffeur?!?) ensuite, vous allez devoir construire votre application 64 bits.
/3GB
interrupteur et je doute que vous pourriez obtenir beaucoup plus de 2GO mappé. Et je ne parle pas de la mémoire physique à tous, de sorte que le PAE argument ne s'applique pas ici-PAE n'aide pas la mémoire virtuelle, seulement de la RAM physique. Sur un système 64 bits, les applications peuvent obtenir un enfer de beaucoup plus de 4 go -- qu'ils ont un 2EiB adresse de l'espace pour jouer avec!_asm
déclaration sans passer par la mémoire. GNU C asm inline syntaxe est beaucoup plus compliqué, mais si vous comprenez la conception) vous savez exactement ce que vous obtenez et peut les vaincre en moins d'optimisations. (Visiblement détruit la constante de propagation et de la valeur portée info, donc gcc.gnu.org/wiki/DontUseInlineAsm sauf si vous avez à, surtout si la seule motivation est la performance. Habituellement préférable d'utiliser intrinsèques et/ou modifier le source C++.)À l'exception de @Billy est génial d'écrire, si vous vous sentez vraiment la nécessité d'utiliser inline 64bit l'assemblée, alors vous pouvez utiliser un externe assembleur comme MASM de le faire, voir ce. (il est aussi possible d'accélérer les choses avec pré-créer des scripts).
Intel Compilateur C 15 a inline capacité en 64 bits aussi.
Et vous pourriez intégrer l'IC dans Visual Studio comme un ensemble d'outils: vous devrez alors les VC++ 64 bits avec inline assemblée.
Un hic cependant, son cher
cheers
Pendant que nous y sommes, MinGW a aussi 64 bits inline assemblée de la langue; et il est assez rapide, et gratuit. Il sert à être lent sur certains des mathématiques; donc, je commencerais la comparaison des performances de MSVC vs MinGW pour voir si ses un décent de départ idéal pour votre application.
Aussi, si assembly en ligne est censé ralentir code environnant; il me semble que cela pourrait être vrai pour de nombreux segments courts:
Assemblée beaucoup peuvent avoir une place dans le code qui a besoin élevé d'optimisation, peu importe ce que M$ est dit. Vous ne savez pas vraiment si l'assemblée ou de ne pas accélérer code jusqu'à ce que vous l'essayez. Tout le reste est juste ostentation.
Je préfère l'approche de la compilation du code c++ dans l'assemblée, puis la main de l'optimisation de QUE. Il vous permet d'économiser la peine d'écrire beaucoup, et avec un peu de pratique, vous pouvez utiliser le compilateur de meilleures optimisations; et puis commencer à améliorer sur ce point. FWIW, je n'ai jamais eu besoin d'un programme moderne. Souvent, d'autres choses peuvent accélérer autant ou plus - par exemple, comme le multi-threading. Cependant, pour la performance des applications critiques, je ne vois aucune raison de ne pas essayer; et de même l'utiliser si cela fonctionne. M$ vient d'être paresseux.
-march=native
sur certains des futurs CPU pourrait faire mieux. Donc, assurez-vous de maintenir un décent version C, pour les essais et la portabilité ainsi que de tester par rapport généré par le compilateur asm sur les futurs Processeurs.