Как я могу узнать количество бит процессора / ОС в C

Я знаю, как получить количество бит процессора или операционной системы с оболочкой.

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

Тем не менее, как мы можем получить число битов в программе на Си. Это вопрос интервью, и мое решение заключается в следующем:

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

Но интервьюер сказал, что это неправильно. Итак, каков правильный ответ?

2 ответа

Решение

POSIX также предоставляет функцию C uname. Вы можете получить аналогичный результат, как команда оболочки 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

В Linux простой способ сделать, например, popen с uname -m команда и разобрать вывод.

Другой способ заключается в том, чтобы посмотреть на источник uname команда (как это легко доступно) и реализовать что-то на основе этого непосредственно.

Другие вопросы по тегам