Определить архитектуру системы (x86 / x64) во время работы
-
06-07-2019 - |
Вопрос
Можно ли определить архитектуру системы / процессора, когда программа работает (под 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 р>