Domanda

È possibile rilevare l'architettura del sistema / processore mentre il programma è in esecuzione (sotto Windows e Linux) in c ++?

È stato utile?

Soluzione

Su Windows, puoi utilizzare < code> __ cpuid . Su Linux, puoi aprire (" / proc / cpuinfo ") e guardarlo attraverso.

Ecco un esempio su Windows, basato sull'esempio in MSDN pagina:

#include <intrin.h>

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

Altri suggerimenti

In Linux, puoi usare la chiamata di sistema uname . Riempie questa struttura allocata dall'utente:

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

Il campo machine identificherà l'architettura.

A seconda di cosa si intende fare con queste informazioni (ad es. selezionare il codice assembly più veloce codificato a mano per una CPU specifica), sotto Linux potresti voler leggere / proc / cpuinfo, in particolare: il " flags " sezione, quindi puoi scegliere tra implementazione SSE / SSE2 vs. implementazione MMX vs. qualunque cosa.

Il sistema big endian vs. little endian è un po 'più complicato, fare riferimento a: http: // en.wikipedia.org/wiki/Endianess

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top