2017-06-20 14 views
1

64ビットが完璧かどうかを判断するブール値ですが、ビット数を表す整数も問題ありません。アプリケーションのOSが32ビットまたは64ビットで動作しているかどうかを確認する方法はありますか?

私は、統計のためにPCのアーキテクチャに関するいくつかの情報を取りたいと思います。

+2

基本的に[マシンが32ビットか64ビットかどうかを見つける方法]の複製(https://stackoverflow.com/questions/2401756/how-to-find-if-the-machine-is-32bit-or- 64bit)。 – Shepmaster

+0

@Shepmasterこの質問は[tag:c]についてですが、これは[tag:rust]についての質問です。 – tversteeg

+2

だから?質問はRustとは関係がありません。定義によると、情報をOSに照会する方法について質問している.Rustの言語とRustの標準ライブラリのどちらも扱っていない。 – Shepmaster

答えて

2

あなたのプログラムは、正しいアーキテクチャ/ターゲット用に既にコンパイルされていることをお勧めします。これは、コンパイル時に、プログラムが32ビットまたは64ビットのターゲット用にコンパイルされているかどうかをすでに知っていることを意味します。

fn is_compiled_for_64_bit() -> bool { 
    cfg!(target_pointer_width = "64") 
} 

#[cfg(target_pointer_width = "32")] 
fn foo() { 
    println!("foo compiled for 32 bit"); 
} 

#[cfg(target_pointer_width = "64")] 
fn foo() { 
    println!("foo compiled for 64 bit"); 
} 

しかし、あなたはあなたのユーザーにのみ32ビットバイナリを出荷したい場合には、あなたのプログラムは、ユーザの32ビットハードウェアでネイティブのいずれかが実行されるか:あなたはcfg() attributeまたはcfg!() macroを使用していることを確認することができますユーザーの64ビットハードウェアによる互換モードの。あなたのプログラムが実際に32ビットアーキテクチャ上で動作するか32ビット互換モードで動作するかは、オペレーティングシステムによって異なります。私はそれを行うための簡単なクロスプラットフォームの方法を知らない。いずれにしても、ターゲットとするアーキテクチャごとに個別にコンパイルすることをお勧めします。

+1

OSは64または32ビットかどうか質問しています。アプリケーションではありません。 – mason

+2

@masonその部分は、 "あなたのプログラムが実際に32ビットアーキテクチャ上で実行されるか32ビット互換モードで実行されるかを見つけるには..."という段落で対処されています。 – Shepmaster

-1

あなたはこれを使用することができます。プログラムは、上でコンパイルされたオペレーティングシステムが推奨されるものであれば

#[cfg(target_os="your operating system here")] 
// code here 

これは文字通りチェックします。 UNIXオペレーティング・システムである

#[cfg(all(unix, target_pointer_width = "32"))] 
// code here 

(プレースホルダは、などのWindowsをサポートする必要があります)、および32は、OSのbit化である:それから私は、オペレーティングシステムのビットをチェックするために、これを行うことができますね。

+0

[Lukas Kalbertodtの答え](https:// stackoverflow。 com/a/44655636/155423)は既にこの回答の内容を示しています。おそらく、あなたはこの新しい答えがもたらすものを明確にすることができますか?これには同じ制限があります。互換性環境で実行すると64ビットを報告しません。 – Shepmaster

+0

@Shepmaster申し訳ありません!私は十分にそれを十分に読んでいない! – lolman

+0

@Shepmasterでは、 "target_os"とそれに類するパラメータの有効な値のリストはどこにありますか?ありがとう。 –

関連する問題