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 回答