Pregunta

¿Es posible detectar la arquitectura del sistema / procesador mientras el programa se está ejecutando (en Windows y Linux) en C ++?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top