如何用C计算计算机的字大小?

时间:2011-10-10 11:01:43

标签: c computer-architecture

  

可能重复:
  Determine word size of my processor

今天是一个面试问题。但我不知道......


我认为面试官会测量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; 
} 

结果似乎是对的,你这么认为吗?

2 个答案:

答案 0 :(得分:3)

简短回答:标准没有定义保证与底层架构的字大小相对应的数据类型,而“字大小”在现代CPU上的含义是相当模糊的:Word Size versus Address Size

目前的处理器具有兼容模式,不同大小的寄存器,高级寻址模式和适用于各种宽度数据的指令,谈论一般的“字大小”至少是不精确的。

我认为面试官仍然生活在90年代,并且还记得当大多数计算机仍然是16位时,WinAPI引入的可疑的WORDDWORD类型。

答案 1 :(得分:0)

我认为他们期待这样的事情:

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