1

重複の可能性:
プロセッサのワード サイズを決定する

今日は面接の質問です。しかし、私は知りませんでした...


インタビュアーは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; 
} 

結果は正しいようですが、そう思いますか?

4

2 に答える 2

4

短い答え: 標準では、基礎となるアーキテクチャのワード サイズに対応することが保証されているデータ型を定義していません。また、最新の CPU で「ワード サイズ」が意味するものは非常にあいまいです:ワード サイズ 対 アドレス サイズ

現在のプロセッサには、互換モード、異なるサイズのレジスタ、高度なアドレッシング モード、およびさまざまな幅のデータに適した命令があるため、一般的な「ワード サイズ」について話すことは、控えめに言っても不正確です。

インタビュアーはまだ 90 年代に住んでいて、ほとんどのコンピューターがまだ 16 ビットだった頃に WinAPI によって導入された疑わしい呼び出しWORDと型を覚えていると思います。DWORD

于 2011-10-10T11:26:54.140 に答える
1

彼らは次のようなことを期待していたと思います。

printf("%d\n", (int)sizeof(int) * CHAR_BIT);
于 2011-10-10T11:04:43.550 に答える