Wie wirkt sich die Verwendung von int64_t anstelle von int32_t auf 32-Bit-Systemen auf die Leistung aus?

Unsere C ++ - Bibliothek verwendet zurzeit time_t zum Speichern von Zeitwerten. Ich brauche an einigen Stellen eine Genauigkeit von weniger als einer Sekunde, daher ist dort ohnehin ein größerer Datentyp erforderlich. Außerdem kann es hilfreich sein, das Jahr-2038-Problem an einigen Stellen zu umgehen. Ich denke also darüber nach, komplett zu einer einzelnen Time-Klasse mit einem zugrunde liegenden int64_t-Wert zu wechseln, um den time_t-Wert an allen Stellen zu ersetzen.

Jetzt frage ich mich, wie sich eine solche Änderung auf die Leistung auswirkt, wenn dieser Code auf einem 32-Bit-Betriebssystem oder einer 32-Bit-CPU ausgeführt wird. IIUC Der Compiler generiert Code, um eine 64-Bit-Arithmetik unter Verwendung von 32-Bit-Registern durchzuführen. Wenn dies jedoch zu langsam ist, muss ich möglicherweise differenzierter mit Zeitwerten umgehen, was die Wartung der Software erschwert.

Was mich interessiert:

Welche Faktoren beeinflussen die Leistung dieser Operationen? Wahrscheinlich der Compiler und die Compilerversion; Aber beeinflusst das Betriebssystem oder die CPU-Marke / das CPU-Modell dies auch? Verwendet ein normales 32-Bit-System die 64-Bit-Register moderner CPUs?Welche Operationen sind besonders langsam, wenn sie mit 32-Bit emuliert werden? Oder was wird fast keine Verlangsamung haben?Gibt es Benchmark-Ergebnisse für die Verwendung von int64_t / uint64_t auf 32-Bit-Systemen?Hat jemand eigene Erfahrungen mit dieser Auswirkung auf die Leistung?

Ich interessiere mich hauptsächlich für g ++ 4.1 und 4.4 unter Linux 2.6 (RHEL5, RHEL6) auf Intel Core 2-Systemen. Es wäre aber auch schön, die Situation für andere Systeme (wie Sparc Solaris + Solaris CC, Windows + MSVC) zu kennen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage