Определить архитектуру системы (x86 / x64) во время работы

StackOverflow https://stackoverflow.com/questions/1636950

Вопрос

Можно ли определить архитектуру системы / процессора, когда программа работает (под windows и под linux) на c ++?

Это было полезно?

Решение

В Windows вы можете использовать < код> __ CPUID . В Linux вы можете открыть (" / proc / cpuinfo ") и просмотреть его.

Вот пример для Windows, основанный на примере в MSDN страница:

#include <intrin.h>

bool cpuSupports64()
{
    int CPUInfo[4];
    __cpuid(CPUInfo, 0);
    return (CPUInfo[3] & 0x20000000) || false;
}

Другие советы

В Linux вы можете использовать системный вызов uname . Он заполняет эту пользовательскую структуру:

  struct utsname {
           char sysname[];    /* Operating system name (e.g., "Linux") */
           char nodename[];   /* Name within "some implementation-defined
                                 network" */
           char release[];    /* OS release (e.g., "2.6.28") */
           char version[];    /* OS version */
           char machine[];    /* Hardware identifier */
       #ifdef _GNU_SOURCE
           char domainname[]; /* NIS or YP domain name */
       #endif
       };

Поле machine будет определять архитектуру.

В зависимости от того, что вы намерены делать с этой информацией (например, выбрать самый быстрый код сборки с ручным кодом для конкретного процессора), в Linux вам может понадобиться прочитать / proc / cpuinfo, а именно: " flags " раздел, так что вы можете выбрать между реализацией SSE / SSE2 против реализации MMX и чем угодно.

Система с прямым порядком байтов и системой с прямым порядком байтов немного сложнее, обратитесь к: http: // en.wikipedia.org/wiki/Endianess

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top