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 } }
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!