Detectando el tiempo de comstackción de la architecture de la CPU

¿Cuál es la forma más confiable de descubrir la architecture de la CPU al comstackr el código C o C ++? Por lo que puedo decir, los diferentes comstackdores tienen su propio conjunto de definiciones de preprocesador no estándar ( _M_X86 en MSVS, __i386__ , __arm__ en GCC, etc.).

¿Hay una manera estándar de detectar la architecture que estoy construyendo? De lo contrario, ¿existe una fuente para una lista completa de tales definiciones para varios comstackdores, como un encabezado con todos los caracteres #ifdef s?

Aquí hay información sobre Macros de Arquitectura Predefinida y otros tipos de macros predefinidas.

Esta pregunta pregunta dónde se definen en el código fuente de GCC.

No hay un estándar entre comstackdores, pero cada comstackdor tiende a ser bastante consistente. Puedes construir un encabezado para ti que sea algo como esto:

 #if MSVC #ifdef _M_X86 #define ARCH_X86 #endif #endif #if GCC #ifdef __i386__ #define ARCH_X86 #endif #endif 

No tiene mucho sentido una lista exhaustiva, porque hay miles de comstackdores pero solo 3-4 en uso generalizado (Microsoft C ++, GCC, Intel CC, ¿quizás TenDRA?). Simplemente decida qué comstackdores admitirá su aplicación, liste sus #defines y actualice su encabezado según sea necesario.

Si desea descargar todas las funciones disponibles en una plataforma particular, puede ejecutar GCC como:

gcc -march=native -dM -E -

#define __SSE3__ 1 Marcos como #define __SSE3__ 1 , #define __AES__ 1 , etc.

No hay nada estándar. Brian Hook documentó un montón de estos en su “Arnes portátil de código abierto”, e incluso trata de convertirlos en algo coherente y utilizable (mmm con respecto a eso). Ver el encabezado posh.h en este sitio:

Tenga en cuenta que el enlace de arriba puede requerir que ingrese algún userid / password falso debido a un ataque de DOS hace algún tiempo.

Si necesita una detección detallada de las características de la CPU, el mejor enfoque es enviar también un progtwig CPUID que emita a stdout o algún archivo “cpu_config.h” el conjunto de características admitidas por la CPU. Luego integra ese progtwig con su proceso de comstackción.