Heim >Backend-Entwicklung >C++ >Wie kann man die CPU-Architektur zur Kompilierungszeit zuverlässig erkennen?
Bestimmen der CPU-Architektur zur Kompilierungszeit
Das Erkennen der CPU-Architektur beim Kompilieren von Code ist für die Erstellung maßgeschneiderter Software unerlässlich. Allerdings erschwert die zunehmende Verbreitung von Compilern mit eigenen Präprozessordefinitionen den Prozess.
Standarderkennungsmethode
Bedauerlicherweise gibt es keinen standardisierten Ansatz zur Erkennung der CPU-Architektur. Compiler verwenden ihre eigenen, nicht standardmäßigen Präprozessordefinitionen, wie _M_X86 für MSVS, i386 für GCC und arm für GCC.
Umfassende vordefinierte Definitionen
In Ermangelung einer Standardnachweismethode a Eine umfassende Liste von Präprozessordefinitionen für verschiedene Compiler ist unerlässlich. Eine solche Ressource würde ein zentrales Repository von #ifdef-Makros zur Erkennung verschiedener Architekturen bereitstellen.
Zuverlässige Architekturerkennung
Ein zuverlässiger Ansatz zur Erkennung von CPU-Architekturen beinhaltet die Verwendung einer benutzerdefinierten Funktion das mehrere Präprozessordefinitionen nutzt. Diese Funktion kann eine Vielzahl von Architekturen erkennen, darunter x86, ARM, MIPS, PowerPC und andere.
Hier ist ein Beispiel für eine Funktion, die die Architekturerkennung durchführt:
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 } }
Dies Die Funktion kann verwendet werden, um die CPU-Architektur während der Kompilierung zuverlässig zu erkennen und so architekturspezifischen Code zu erstellen.
Das obige ist der detaillierte Inhalt vonWie kann man die CPU-Architektur zur Kompilierungszeit zuverlässig erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!