Quelqu'un peut-il donner un simple c-programme pour trouver si mon ordinateur est 16 bits ou 32 bits ou 64 bits?Comment trouver en utilisant c-programme si mon ordinateur est 16 bits ou 32 bits ou 64 bits
Répondre
Si vous êtes préoccupé par Linux OS seulement alors vous pouvez utiliser l'appel uname(). Vous pouvez passer struct utsname à cette API et obtenir les détails. Vous pouvez obtenir des détails supplémentaires sur l'URL suivante
http://linux.die.net/man/2/uname
examine également la code source de commande uname peut vous aider davantage à ce sujet.
Cela devrait fonctionner:
#include <iostream>
int main(int argc, char ** arv){
std::cout << "sizeof(void*)=" << sizeof(void*) << std::endl;
return 0;
}
Voir mon commenter la réponse de HPT. –
En outre, ce n'est pas C. – domen
En tant que « détail de mise en œuvre » c'est exactement le genre de chose qui reste de la spécification formelle pour le langage C; étant donné que le compilateur est censé théoriquement vous cacher cela, tout ce que vous pourriez faire pour comprendre cette information dépend techniquement d'un "comportement non standard non défini".
Voilà la réponse pédante. La réponse pratique est que vous pouvez utiliser sizeof(int)
pour déterminer la largeur du registre sur votre architecture particulière avec n'importe quel compilateur sensible.
Notez que ceci est déterminé au moment de la compilation, pas le temps d'exécution, il vous indique si votre application a été compilé en mode 32 bits ou 64 bits (ou tout bits), pas que ce soit être par exemple exécuté sur une machine 64 bits émulant 32 bits x86. Pour ce genre d'information, vous devez regarder des choses totalement spécifiques à la plate-forme comme CPUID
.
N'utilisez pas 'sizeof (int)' pour cela. Il ne vous donnera pas (en pratique) la bonne réponse. A la place, 'sizeof (size_t)', 'sizeof (ptrdiff_t)', ou 'sizeof (char *)' serait un bon choix. (Sur toute machine saine, ils seront tous les mêmes ..) –
sizeof (char *) ne fonctionnera pas sur les plates-formes avec des tailles de pointeurs variables (par exemple x86 en mode réel avec le non-sens proche/loin/énorme pointeur). size_t le fera probablement. Quels compilateurs ont un type 'int' qui n'a pas la largeur du registre? – Crashworks
Le compilateur doit savoir à moment de la compilation quelle architecture il est construit pour, donc il ne devrait pas être nécessaire de déterminer cela à exécution.
Un compilateur aura typiquement une macro prédéfinie indiquant l'architecture; vous devrez tester toutes les architectures que vous avez l'intention de construire. Une liste de ces macros pour diverses architectures est fournie à http://predef.sourceforge.net/prearch.html
Alors, que faire si vous exécutez un programme 32 bits sur un système 64 bits? – atzz
En ce qui concerne le programme 32 bits, il fonctionne sur un système 32 bits. Il ne peut utiliser aucune fonctionnalité 64 bits dans sa propre adresse/espace de traitement. La seule raison pour laquelle je pourrais penser qu'il pourrait être utile de savoir si c'est sur un système d'exploitation hôte 32 bits ou 64 bits est de décider quelle version d'un programme externe pour télécharger et installer. –
@atzz: Le programme pense qu'il s'exécute sur une machine 32 bits, donc tout test que vous concevez retournera 32bit. Le programme sera exécuté dans le sous-système 32 bits du système d'exploitation qui sera une machine virtuelle. – Clifford
Il existe plusieurs couches ici compilateur - OS - Processeur. Obtention de l'arche de la machine à partir d'un programme utilisateur C n'est pas conseillé car vous n'avez pas assez d'informations et n'est pas portable.
Cependant, si tu veux savoir pour OS comme Linux spécifique est ici le link
Vous pouvez utiliser l'aide des outils ci-dessus dans votre programme.
Vous pouvez utiliser préprocesseur:
#ifdef __i386__
blahblah
#elif __arm__
blahblah
#elif defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64)
blahblah
#endif
- 1. L'iPhone OS 64 bits ou 32 bits?
- 2. Assemblage 16 bits sur Windows 64 bits?
- 3. Comment vérifier si IIS est en mode 32 bits ou 64 bits
- 4. Xcode & 64 bits & 32 bits Question
- 5. directive C# pour indiquer 32 bits ou 64 bits construire
- 6. Comment puis-je déterminer si une application que j'installe est 32 bits ou 64 bits?
- 7. Version 64 ou 32 bits de WinDBG?
- 8. debunits nunit en 64 bits, l'application est en 32 bits
- 9. Comment détecter si une application Cocoa est 32 bits ou 64 bits?
- 10. Exécution C# sachant si la version 32 bits ou 64 bits de l'interface COM est utilisée
- 11. Comment mon programme peut-il déterminer s'il fonctionne sur Windows 32 bits ou 64 bits?
- 12. Déterminer par programme si natif .exe est 32 bits ou 64 bits
- 13. SetEnvironmentVariable en 32 bits Processus sur OS Windows 64 bits
- 14. Comment puis-je savoir si mon processeur est en 32 ou 64 bits?
- 15. Taille de la structure, vérifiez si 64 bits ou 32 bits
- 16. En cours d'exécution sur matlab 32 ou 64 bits?
- 17. Lecteur Flash 32 bits dans Safari 64 bits: comment?
- 18. 64 bits flottants compilés avec le compilateur 32 bits sur OS 64 bits
- 19. Macintosh Python: problèmes 64 bits vs 32 bits
- 20. Mélange de code 32 bits et 16 bits avec nasm
- 21. Comment utiliser Watin 64 bits avec MSIE 32 bits
- 22. Compiler le projet 32 bits VS 2003 en 64 bits
- 23. VS build - 32 bits vs 64
- 24. Détection du mode 32 bits sur IIS 64 bits
- 25. Chargement d'un processus 32 bits dans un environnement 64 bits
- 26. Version .NET avec des assemblages 64 bits et 32 bits
- 27. Traiter le code 32 bits sur Snow Leopard 64 bits?
- 28. Accès aux applications 32 bits du registre 64 bits
- 29. quel mysql 32/64 bits
- 30. Sérialisation binaire .NET entre OS 32 bits et 64 bits
Ce n'est pas possible * * général, mais pour les architectures spécifiques ou des systèmes d'exploitation, il peut être fait. – caf
J'utilise le compilateur linux gcc – Jagan
Existe-t-il même une implémentation Linux/GCC 16 bits? – Clifford