如何知道C中cpu/os的位计数

如何知道C中cpu/os的位计数,c,linux,sizeof,bitcount,C,Linux,Sizeof,Bitcount,我知道如何使用shell获取cpu或操作系统的位计数 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); 但是面试官说这是错误的

我知道如何使用shell获取cpu或操作系统的位计数

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);

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

在Linux上,一种简单的方法是使用命令并解析输出


另一种方法是查看
uname
命令的源代码(因为它随时可用),并直接基于此实现一些东西。

POSIX还提供了一个C函数。您可以获得类似的结果,如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;
}

虽然指针的大小通常跟随平台的“大小”,但这并不总是正确的。唯一的方法是使用操作系统本机函数查询操作系统。@JoachimPileborg我们可以使用哪些操作系统本机函数?当然取决于操作系统。@JoachimPileborg。。我很抱歉。让我们假设操作系统是Linux。的可能副本
sysname: Linux
version: #1 SMP Tue Oct 2 22:01:37 EDT 2012
machine: i686