Maison > développement back-end > C++ > Comment puis-je détecter l'architecture du processeur au moment de la compilation ?

Comment puis-je détecter l'architecture du processeur au moment de la compilation ?

Barbara Streisand
Libérer: 2024-11-07 11:10:03
original
830 Les gens l'ont consulté

How Can I Detect CPU Architecture at Compile Time?

Détermination de l'architecture du processeur au moment de la compilation

L'identification de l'architecture du processeur est cruciale pour l'optimisation du code et les opérations spécifiques au matériel. Cependant, différents compilateurs utilisent différentes définitions de préprocesseur à cette fin, telles que « _M_X86 » pour MSVS et « __i386__ » pour GCC.

Existe-t-il une approche standard pour la détection d'architecture ?

Malheureusement, il n'existe aucun moyen standard de déterminer l'architecture du processeur lors de la compilation. Les compilateurs implémentent leurs propres méthodes pour représenter ces informations.

Liste complète des définitions d'architecture

Bien qu'il n'existe pas de liste standardisée de définitions, plusieurs ressources sont disponibles pour aider à identifier les définitions spécifiques liées au compilateur :

  • Documentation du compilateur : Reportez-vous à la documentation spécifique du compilateur pour plus d'informations sur les définitions de préprocesseur prises en charge.
  • En ligne Ressources : Des sites Web comme « Github.com » ou « Stack Overflow » fournissent souvent des informations sur les définitions d'architecture spécifiques au compilateur.

Exemple de code complet pour la détection d'architecture

L'extrait de code suivant offre une méthode complète pour déterminer l'architecture du processeur lors de la compilation, prenant en compte un large éventail d'architectures :

extern "C" {
    const char *getBuild() { //Get current architecture, detectx nearly every architecture. Coded by Freak
        #if defined(__x86_64__) || defined(_M_X64)
        return "x86_64";
        #elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86)
        return "x86_32";
        #elif defined(__ARM_ARCH_2__)
        return "ARM2";
        #elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__)
        return "ARM3";
        #elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T)
        return "ARM4T";
        #elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_)
        return "ARM5"
        #elif defined(__ARM_ARCH_6T2_) || defined(__ARM_ARCH_6T2_)
        return "ARM6T2";
        #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)
        return "ARM6";
        #elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
        return "ARM7";
        #elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
        return "ARM7A";
        #elif defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
        return "ARM7R";
        #elif defined(__ARM_ARCH_7M__)
        return "ARM7M";
        #elif defined(__ARM_ARCH_7S__)
        return "ARM7S";
        #elif defined(__aarch64__) || defined(_M_ARM64)
        return "ARM64";
        #elif defined(mips) || defined(__mips__) || defined(__mips)
        return "MIPS";
        #elif defined(__sh__)
        return "SUPERH";
        #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC)
        return "POWERPC";
        #elif defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64)
        return "POWERPC64";
        #elif defined(__sparc__) || defined(__sparc)
        return "SPARC";
        #elif defined(__m68k__)
        return "M68K";
        #else
        return "UNKNOWN";
        #endif
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal