2013-10-17 78 views
2

我知道如何通过shell获取cpu或操作系统的位数。如何知道cpu/os的位数C

cat /proc/cpuinfo | grep lm #-> get bit count of a cpu 
uname -a     #-> get bit count of an operation system 

但是,我们如何获得C程序中的位数。 这是一个面试问题,我的解决方法是如下:

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

但面试官说,这是错误的。那么,正确的答案是什么?

+1

虽然指针的大小*经常*遵守平台的“大小”,这是不永远是真的。唯一的方法是使用操作系统本机功能查询操作系统。 –

+0

@JoachimPileborg我们可以使用哪些操作系统本机功能? – xianyu1337

+0

当然取决于操作系统。 –

回答

1

POSIX还提供C函数uname。你可以得到类似的结果,如shell命令uname:我的机器上

#include <stdio.h> 
#include <sys/utsname.h> 

int main(){ 
    struct utsname buf; 
    uname(&buf); 
    printf("sysname: %s\nversion: %s\nmachine: %s\n ", buf.sysname, buf.version, buf.machine); 
    return 0; 
} 

输出:

sysname: Linux 
version: #1 SMP Tue Oct 2 22:01:37 EDT 2012 
machine: i686 
1

在Linux上,一种简单的方法是做例如popenuname -m命令并解析输出。

另一种方法是查看uname命令的源代码(因为它很容易获得)并直接实现某些功能。