¿Cuál es el impacto en el rendimiento del uso de int64_t en lugar de int32_t en sistemas de 32 bits?

Nuestra biblioteca de C ++ actualmente usa time_t para almacenar valores de tiempo. Estoy empezando a necesitar una precisión de menos de un segundo en algunos lugares, por lo que de todos modos será necesario un tipo de datos más grande. Además, podría ser útil sortear el problema del Año-2038 en algunos lugares. Así que estoy pensando en cambiar completamente a una sola clase de tiempo con un valor int64_t subyacente, para reemplazar el valor de time_t en todos los lugares.

Ahora me pregunto sobre el impacto en el rendimiento de tal cambio cuando se ejecuta este código en un sistema operativo de 32 bits o una CPU de 32 bits. IIUC, el compilador generará código para realizar aritmética de 64 bits utilizando registros de 32 bits. Pero si esto es demasiado lento, es posible que tenga que usar una forma más diferenciada para tratar con los valores de tiempo, lo que podría hacer que el software sea más difícil de mantener.

Lo que me interesa:

¿Qué factores influyen en el desempeño de estas operaciones? Probablemente la versión del compilador y compilador; pero, ¿el sistema operativo o la marca / modelo de la CPU también influyen en esto? ¿Utilizará un sistema normal de 32 bits los registros de 64 bits de las CPU modernas?¿Qué operaciones serán especialmente lentas cuando se emulen en 32 bits? ¿O cuál casi no tendrá ralentización?¿hay resultados de referencia existentes para usar int64_t / uint64_t en sistemas de 32 bits?¿Alguien tiene experiencia propia sobre este impacto en el rendimiento?

Estoy más interesado en g ++ 4.1 y 4.4 en Linux 2.6 (RHEL5, RHEL6) en sistemas Intel Core 2; pero también sería bueno conocer la situación de otros sistemas (como Sparc Solaris + Solaris CC, Windows + MSVC).

Respuestas a la pregunta(4)

Su respuesta a la pregunta