c++ - saber - sistemas operativos de 32 y 64 bits
¿Necesito tener un procesador de 64 bits para usar el tipo de datos de 64 bits? (4)
Tengo algunas preguntas:
¿Necesito tener un procesador de 64 bits para usar el tipo de datos de 64 bits (__ int64 o int64_t)?
¿Qué significa by, la "t" de int64_t?
¿A partir de qué versión de GCC y VCC son compatibles con el tipo de datos?
¿El tipo de datos de 64 bits simplemente está duplicando la longitud de los datos o también hay otras cosas que se ocultan?
- No, puede procesar dichos datos en una máquina de 32 bits. Mientras tu compilador admita esos tipos de datos, estás bien.
- int64_t es solo su nombre, como se define en el estándar.
- Creo que todas las versiones de GCC y MSVC de este siglo son compatibles con enteros de 64 bits en una arquitectura de 32 bits.
- Un entero de 64 bits es solo el doble del tamaño de un entero de 32 bits.
No necesita un procesador de 64 bits para usar el tipo de datos de 64 bits. Todo depende del compilador y solo del compilador. El compilador puede proporcionarle tipos de datos de 128 bits, 237 bits u 803 bits, si así lo desea.
Sin embargo, tenga en cuenta que normalmente las CPU de 32 bits no pueden manejar valores de 64 bits directamente, lo que significa que la carga de soportar todas las operaciones de lenguaje necesarias para el tipo de 64 bits recae en el compilador y la biblioteca. El compilador tendrá que generar una secuencia más o menos compleja de instrucciones de CPU de 32 bits para realizar adiciones, desplazamientos, multiplicaciones, etc. en valores de 64 bits. Esto significa que en el código generado para las CPU de 32 bits, las operaciones básicas de idioma en los tipos de datos de 64 bits no serán tan eficientes como lo serían en el código generado para las CPU de 64 bits (ya que en la última operación la mayoría de las operaciones de idioma se realizarían mediante una sola instrucción de la CPU).
La "t" en int64_t
significa "tipo" o "nombre de typedef". Esa es una vieja convención de nomenclatura aceptada para las definiciones de biblioteca estándar.
En cuanto a las versiones del compilador, en realidad es una pregunta ambigua. El nombre typedef int64_t
es parte de la biblioteca estándar del lenguaje C (pero no del lenguaje C ++), mientras que el soporte para tipos de enteros de 64 bits (bajo cualquier nombre) es parte del compilador. Entonces, ¿sobre cuál estás preguntando? Por ejemplo, el compilador MSVC ha soportado tipos de datos de 64 bits durante mucho tiempo, pero los nombres de estos tipos han sido diferentes. Un entero con signo de 64 bits se llama __int64
de algo así en MSVC. En cuanto a la int64_t
typedef, AFAIK, aún no forma parte de la biblioteca estándar de MSVC. De hecho, int64_t
convirtió en parte del lenguaje C de la versión C99 de su especificación. Al mismo tiempo, no es parte del lenguaje C ++. Por lo tanto, en general, se supone que no debes tener int64_t
en el código C ++ independientemente de la versión del compilador.
En cuanto a la longitud de los datos ... Bueno, sí, solo está duplicando el número de bits. El resto sigue.
No, los compiladores en arquitecturas de 32 bits emulan aritmética de 64 bits. No es terriblemente rápido, pero no es tan malo.
La t
refiere al type
. Este es el legado de C, donde las estructuras deberían ser referidas de manera diferente.
Los tipos integrales de 64 bits pueden haber aumentado la alineación, pero eso es todo.
No tengo idea para el punto 3.
Si observa /usr/include/stdint.h
, encontrará que int64_t
se define como
typedef long long int int64_t;
Entonces, como dijo David, es un compilador y no depende de la arquitectura.