Detecta la arquitectura del sistema (x86 / x64) mientras se ejecuta
-
06-07-2019 - |
Pregunta
¿Es posible detectar la arquitectura del sistema / procesador mientras el programa se está ejecutando (en Windows y Linux) en C ++?
Solución
En Windows, puede usar < code> __ cpuid . En Linux, puede abrir (" / proc / cpuinfo ")
y mirar a través de él.
Aquí hay un ejemplo en Windows, basado en el ejemplo en el página MSDN :
#include <intrin.h>
bool cpuSupports64()
{
int CPUInfo[4];
__cpuid(CPUInfo, 0);
return (CPUInfo[3] & 0x20000000) || false;
}
Otros consejos
En Linux, puede usar la llamada al sistema uname
. Completa esta estructura asignada por el usuario:
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 };
El campo machine
identificará la arquitectura.
Dependiendo de lo que intente hacer con esta información (por ejemplo, seleccione el código de ensamblaje codificado a mano más rápido para una CPU específica), en Linux puede que desee leer / proc / cpuinfo, específicamente: las " flags " sección, para que pueda elegir entre la implementación SSE / SSE2 frente a la implementación MMX frente a lo que sea.
El sistema big endian frente al sistema little endian es un poco más complicado, consulte: http: // en.wikipedia.org/wiki/Endianess