2013-10-17 34 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命令的源代碼(因爲它很容易獲得)並直接實現某些功能。