2011-10-10 7 views
1

可能性の重複:
Determine word size of my processorCでコンピュータの単語サイズを計算する方法は?

今日は一つのインタビューの質問です。しかし、私は知りませんでした...

私はインタビュアーがCPUのワードサイズを意味すると思います。


私はこのような答えを見つける:

int cpu_bits(void *dummy1, void *dummy2) 
{ 
long offset = (long)&dummy2 - (long)&dummy1; 
int ret = 0; 
if (8 == offset) 
    ret = 64; 
else if (4 == offset) 
    ret = 32; 
else if (2 == offset) 
    ret = 16; 
else if (1 == offset) 
    ret = 8; 
else 
    ret = -1; 
return ret; 
} 

int main() 
{ 
printf("%d\n", cpu_bits(NULL, NULL)); 
return 0; 
} 

結果は右のようです、あなたはそう思いますか?

+6

インタビュアーに心配していた単語サイズの**正確な定義**を聞いて回答を開始します。 – NPE

+0

@PaulRもし8ビットの単語サイズならどうですか? Cでは、intは常に少なくとも16ビットです。 – Juho

+0

@Juho:はい、私は私の答えとコメントを撤回しました。私はそれについて考える時間がありました。;-) –

答えて

3

短い答え:基本的なアーキテクチャのワードサイズに対応することが保証されて、データ型、およびどのような「ワードサイズを定義していない標準"近代的なCPU上の手段は、あまりにも曖昧なことです:Word Size versus Address Size

互換モード、異なるサイズのレジスタ、アドバンストアドレッシングモード、およびさまざまな幅のデータに適した命令を持つ現在のプロセッサでは、一般的な「ワードサイズ」の話は不正確です。

インタビュアーはまだ90年代に住んでいると思いますが、ほとんどのコンピュータがまだ16ビットであった場合、WinAPIによって導入されたWORDDWORDというタイプを覚えています。

0

は、私は、彼らがこのような何かを期待していたと思う:

printf("%d\n", (int)sizeof(int) * CHAR_BIT); 
+2

ワードサイズが8ビットの場合、sizeof(int)は機能しません。また、ほとんどの64ビットコンパイラでは、intは32ビットで、ワードは64ビットです。 – Juho

+0

@PaulR:投稿と編集で競合状態に遭った。 :) –

+0

@Juho:それはうまくいかないという意味ですか? Btw、intはC標準で少なくとも16ビット長でなければなりません。基本的なハードウェア、ワードサイズを調べることはおそらくC言語では信頼できないものです。 –