Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengesan Seni Bina CPU dengan Amanah pada Masa Penyusunan dalam C/C?

Bagaimana untuk Mengesan Seni Bina CPU dengan Amanah pada Masa Penyusunan dalam C/C?

Patricia Arquette
Patricia Arquetteasal
2024-11-11 02:12:02422semak imbas

How to Reliably Detect CPU Architecture at Compile Time in C/C  ?

Mengesan Seni Bina CPU pada Masa Kompilasi: Panduan Komprehensif

Apabila membangunkan kod C atau C, menentukan seni bina CPU sasaran untuk penyusunan ialah penting untuk memastikan prestasi dan keserasian yang optimum. Walau bagaimanapun, pengkompil yang berbeza menggunakan set definisi prapemproses mereka sendiri, menjadikannya mencabar untuk mewujudkan pendekatan universal.

Nasib baik, kaedah komprehensif wujud untuk mengesan seni bina CPU pada masa penyusunan, menghapuskan keperluan untuk bergantung pada bukan -definisi standard. Berikut ialah penyelesaian yang boleh dipercayai:

extern "C" {
    const char *getBuild() {
        #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
    }
}

Kod ini mengesan pelbagai seni bina CPU, meliputi platform moden dan lama. Ia bergantung pada definisi prapemproses standard, memastikan keserasian dengan pelbagai penyusun. Dengan memasukkan fungsi ini ke dalam kod anda, anda boleh menentukan seni bina sasaran dengan tepat semasa penyusunan, membolehkan anda mengoptimumkan kod anda dengan sewajarnya dan mengelakkan isu khusus platform.

Atas ialah kandungan terperinci Bagaimana untuk Mengesan Seni Bina CPU dengan Amanah pada Masa Penyusunan dalam C/C?. 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