Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Mengesan Seni Bina CPU pada Masa Kompilasi?

Bagaimanakah Saya Boleh Mengesan Seni Bina CPU pada Masa Kompilasi?

Barbara Streisand
Barbara Streisandasal
2024-11-07 11:10:03720semak imbas

How Can I Detect CPU Architecture at Compile Time?

Menentukan Seni Bina CPU pada Masa Kompilasi

Mengenal pasti seni bina CPU adalah penting untuk pengoptimuman kod dan operasi khusus perkakasan. Walau bagaimanapun, pengkompil yang berbeza menggunakan definisi prapemproses yang berbeza-beza untuk tujuan ini, seperti "_M_X86" untuk MSVS dan "__i386__" untuk GCC.

Adakah Terdapat Pendekatan Standard untuk Pengesanan Seni Bina?

Malangnya, tiada cara standard untuk menentukan seni bina CPU semasa penyusunan. Penyusun melaksanakan kaedah mereka sendiri untuk mewakili maklumat ini.

Senarai Komprehensif Definisi Seni Bina

Walaupun senarai definisi piawai tidak wujud, terdapat beberapa sumber yang tersedia untuk membantu dalam mengenal pasti takrifan berkaitan pengkompil khusus:

  • Dokumentasi Pengkompil: Rujuk dokumentasi pengkompil khusus untuk mendapatkan maklumat tentang definisi prapemproses yang disokong.
  • Dalam talian Sumber: Tapak web seperti "Github.com" atau "Stack Overflow" selalunya memberikan cerapan tentang definisi seni bina khusus pengkompil.

Contoh Kod Komprehensif untuk Pengesanan Seni Bina

Coretan kod berikut menawarkan kaedah komprehensif untuk menentukan seni bina CPU semasa penyusunan, mengambil kira pelbagai seni bina:

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Seni Bina CPU pada Masa Kompilasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn