Rileva l'architettura di sistema (x86 / x64) durante l'esecuzione
-
06-07-2019 - |
Domanda
È possibile rilevare l'architettura del sistema / processore mentre il programma è in esecuzione (sotto Windows e Linux) in c ++?
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