Pergunta

É possível detectar a arquitetura do sistema / processador enquanto o programa é em execução (no Windows e no Linux) em c ++?

Foi útil?

Solução

No Windows, você pode usar __cpuid . No Linux, você pode open("/proc/cpuinfo") e olhar através dele.

Aqui está um exemplo no Windows, com base no exemplo na rel página MSDN :

#include <intrin.h>

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

Outras dicas

No Linux, você pode usar a chamada de sistema uname. Ele preenche esta estrutura alocada pelo usuário:

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

O campo machine irá identificar a arquitetura.

Dependendo do que você pretende fazer com esta informação (por exemplo, selecionar o código de montagem mais rápida handcoded para um CPU específico), no Linux você pode querer ler o / proc / cpuinfo, especificamente: a seção "bandeiras", para que você possa escolher entre a implementação SSE / SSE2 vs. MMX implementação vs. o que quer.

sistema endian

Big vs. pequeno sistema endian é um pouco mais complicado, consulte: http: // en.wikipedia.org/wiki/Endianess

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top