ホームページ  >  記事  >  バックエンド開発  >  CPU アーキテクチャをコンパイル時に確実に検出するにはどうすればよいですか?

CPU アーキテクチャをコンパイル時に確実に検出するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-08 06:21:02407ブラウズ

How Can CPU Architecture Be Reliably Detected at Compile-Time?

コンパイル時の CPU アーキテクチャの検出

課題:

コンパイル中にターゲット CPU アーキテクチャを決定するのは困難な場合がありますこれは、コンパイラによって採用される非標準のプリプロセッサ定義が異なるためです。これは、アーキテクチャを検出するための信頼性と一貫性のある方法の必要性を示しています。

信頼性の高い検出:

コンパイル時に CPU アーキテクチャを検出するための普遍的に確立された標準はありません。最も信頼性の高いアプローチは、次のコンパイラ固有の定義を利用することです:

  • MSVC: 64 ビット アーキテクチャの場合は _M_X64、32 ビット アーキテクチャの場合は _M_IX86
  • GCC: __i386__ (x86_32 の場合)、__x86_64__ (x86_64 の場合)
  • Clang: GCC に似ていますが、他のアーキテクチャ用の追加定義があります

包括的なヘッダー:

アーキテクチャ検出を一元的に処理する方法として、関連するすべての定義を含むヘッダー ファイルの利用を検討してください。このようなヘッダーは次の機能を提供できます。

#ifdef _M_X64
#define CPU_ARCH "x86_64"
#elif defined(__i386__)
#define CPU_ARCH "x86_32"
...
#else
#define CPU_ARCH "UNKNOWN"
#endif

このヘッダーをコードに組み込むことで、CPU_ARCH 値を簡単にチェックしてターゲット アーキテクチャを決定できます。

カスタム検出例:

さらに詳細なアーキテクチャ検出については、次のコード スニペットを検討してください。

extern "C" {
    const char *getBuild() {
        #if defined(__x86_64__) || defined(_M_X64)
        return "x86_64";
        ...
        #else
        return "UNKNOWN";
        #endif
    }
}

この関数は、x86、ARM、MIPS、PowerPC、および他のアーキテクチャ。

以上がCPU アーキテクチャをコンパイル時に確実に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。