Heim >Backend-Entwicklung >C++ >Wie kann man die CPU-Architektur zur Kompilierungszeit zuverlässig erkennen?

Wie kann man die CPU-Architektur zur Kompilierungszeit zuverlässig erkennen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-22 06:55:15386Durchsuche

How to Reliably Detect CPU Architecture at Compile Time?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn