Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich die CPU-Architektur zur Kompilierungszeit erkennen?

Wie kann ich die CPU-Architektur zur Kompilierungszeit erkennen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-07 11:10:03815Durchsuche

How Can I Detect CPU Architecture at Compile Time?

Bestimmen der CPU-Architektur zur Kompilierungszeit

Die Identifizierung der CPU-Architektur ist für die Codeoptimierung und hardwarespezifische Vorgänge von entscheidender Bedeutung. Allerdings verwenden verschiedene Compiler zu diesem Zweck unterschiedliche Präprozessordefinitionen, wie zum Beispiel „_M_X86“ für MSVS und „__i386__“ für GCC.

Gibt es einen Standardansatz für die Architekturerkennung?

Bedauerlicherweise gibt es keine Standardmethode zur Bestimmung der CPU-Architektur während der Kompilierung. Compiler implementieren ihre eigenen Methoden zur Darstellung dieser Informationen.

Umfassende Liste von Architekturdefinitionen

Obwohl es keine standardisierte Liste von Definitionen gibt, stehen dafür mehrere Ressourcen zur Verfügung Unterstützung bei der Identifizierung spezifischer Compiler-bezogener Definitionen:

  • Compiler-Dokumentation: Siehe Informationen zu unterstützten Präprozessordefinitionen finden Sie in der Dokumentation des jeweiligen Compilers.
  • Online-Ressourcen: Websites wie „Github.com“ oder „Stack Overflow“ bieten oft Einblicke in Compiler-spezifische Architekturdefinitionen.

Umfassendes Codebeispiel für Architektur Erkennung

Der folgende Codeausschnitt bietet eine umfassende Methode zur Bestimmung der CPU-Architektur während der Kompilierung und berücksichtigt dabei eine Vielzahl von Architekturen:

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

Das obige ist der detaillierte Inhalt vonWie kann ich die CPU-Architektur zur Kompilierungszeit 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