オペレーティングシステムのビットをどのように知ることができますか? 前もって感謝します。
4 に答える
Linux では、このような一般的な質問に対する答えは、
uname -m
あるいは:
getconf LONG_BIT
C では、uname(2) システム コールを使用できます。
ウィンドウでは、次を使用できます。
systeminfo | find /I "System type"
または環境を調べます。
set | find "ProgramFiles(x86)"
(または C の getenv() を使用)
元の質問:
Cまたは他の方法でオペレーティングシステムのビットを知る方法は?
正しい方法は、何らかのシステム API またはコマンドを使用してアーキテクチャを取得することです。C で比較するとsizeof
、システム ポインターのサイズはわかりませんが、ターゲット アーキテクチャのポインター サイズはわかります。これは、ほとんどのアーキテクチャ/OS が下位互換性を備えているため、以前の 16 または 32 ビット プログラムを問題なく実行できるためです。32 ビット プログラムのポインターは、64 ビット OS でも 32 ビット長のままです。また、64 ビット アーキテクチャであっても、一部の OS ではx32-abiなどの 32 ビット ポインターを引き続き使用する場合があります。
不注意と間違いでごめんなさい。Linux専用です。Linuxデバイスドライバー3rd、11.1セクション:標準Cタイプの使用。それは言う
このプログラムを使用すると、さまざまなLinuxコンピューターでプログラムを実行することで示されるように、64ビットプラットフォームで長整数とポインターのサイズが異なることを示すことができます。
アーチサイズ:char short int long ptr long-long u8 u16 u32 u64
i386 1 2 4 4 4 8 1 2 4 8
アルファ124 8 8 8 1 2 4 8
armv4l 1 2 4 4 4 8 1 2 4 8
ia64 1 2 4 8 8 8 1 2 4 8
m68k 1 2 4 4 4 8 1 2 4 8
mips 1 2 4 4 4 8 1 2 4 8
ppc 1 2 4 4 4 8 1 2 4 8
sparc 1 2 4 4 4 8 1 2 4 8
sparc64 1 2 4 4 4 8 1 2 4 8
x86_64 1 2 4 8 8 8 1 2 4 8
そして、いくつかの例外があります。例:
SPARC 64アーキテクチャは32ビットのユーザースペースで実行されるため、カーネルスペースでは64ビット幅ですが、ポインターは32ビット幅であることに注意してください。これは、kdatasizeモジュール(サンプルファイル内のディレクトリmisc-modulesで利用可能)をロードすることで確認できます。モジュールは、printkを使用してロード時にサイズ情報を報告し、エラーを返します(したがって、アンロードする必要はありません)。
@ user1437033 Windowsはgcc標準と互換性がないと思います。そのため、Windowsのプログラマーから回答が得られるかもしれません。@Paul R通常のコードと見なす必要がありますよね?arm(32ビットしかない)などのクロスコンパイルツールを使用すると、答えも得られません。
追伸:Dev C ++コンパイラの使用はサポートしていません。多くのシーンで奇妙で、標準ではありません。コードブロックまたはvs2010が適切な選択かもしれません。これがお役に立てば幸いです。