Maison > développement back-end > C++ > le corps du texte

Comment détecter de manière fiable l'architecture du processeur au moment de la compilation ?

Mary-Kate Olsen
Libérer: 2024-11-22 06:55:15
original
341 Les gens l'ont consulté

How to Reliably Detect CPU Architecture at Compile Time?

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

La détection de l'architecture du processeur lors de la compilation du code est essentielle pour créer un logiciel sur mesure. Cependant, la prolifération de compilateurs dotés de leur propre ensemble de définitions de préprocesseur complique le processus.

Méthode de détection standard

Malheureusement, il n'existe pas d'approche standardisée pour détecter l'architecture du processeur. Les compilateurs utilisent leurs propres définitions de préprocesseur non standard, telles que _M_X86 pour MSVS, i386 pour GCC et arm pour GCC.

Définitions prédéfinies complètes

En l'absence de méthode de détection standard, une liste complète des définitions de préprocesseur pour divers compilateurs est essentielle. Une telle ressource fournirait un référentiel centralisé de macros #ifdef pour détecter différentes architectures.

Détection d'architecture fiable

Une approche fiable pour détecter l'architecture du processeur consiste à utiliser une fonction personnalisée. qui exploite plusieurs définitions de préprocesseur. Cette fonction peut détecter un large éventail d'architectures, notamment x86, ARM, MIPS, PowerPC et autres.

Voici un exemple de fonction qui effectue la détection d'architecture :

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

Ceci La fonction peut être utilisée pour détecter de manière fiable l'architecture du processeur lors de la compilation, permettant ainsi la création de code spécifique à l'architecture.

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