Question

Est-il possible de détecter l'architecture système / processeur lorsque le programme est en cours d'exécution (sous Windows et sous Linux) en c ++?

Était-ce utile?

La solution

Sous Windows, vous pouvez utiliser < code> __ cpuid . Sous Linux, vous pouvez ouvrir ("/ proc / cpuinfo") et le parcourir.

Voici un exemple sous Windows, basé sur l'exemple du page MSDN :

#include <intrin.h>

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

Autres conseils

Sous Linux, vous pouvez utiliser l'appel système uname . Il remplit cette structure allouée par l'utilisateur:

  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
       };

Le champ machine identifiera l'architecture.

En fonction de l'utilisation que vous envisagez de faire avec ces informations (par exemple, sélectionnez le code d'assemblage codé à la main le plus rapide pour un processeur spécifique), sous Linux, vous souhaiterez peut-être lire / proc / cpuinfo, en particulier: les "drapeaux". section, vous pouvez donc choisir entre la mise en œuvre SSE / SSE2 ou la mise en oeuvre MMX ou autre.

Le système Big Endian par rapport au système Little Endian est un peu plus compliqué. Voir http: //. en.wikipedia.org/wiki/Endianess

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top