Jaki jest wpływ wydajności używania int64_t zamiast int32_t na systemy 32-bitowe?

Nasza biblioteka C ++ używa obecnie time_t do przechowywania wartości czasu. W niektórych miejscach zaczynam potrzebować precyzji sub-sekundowej, więc i tak potrzebny będzie większy typ danych. Ponadto może być przydatne obejście problemu Rok 2038 w niektórych miejscach. Myślę więc o całkowitym przełączeniu na pojedynczą klasę czasu z podstawową wartością int64_t, aby zastąpić wartość time_t we wszystkich miejscach.

Teraz zastanawiam się nad wpływem takiej zmiany na wydajność podczas uruchamiania tego kodu w 32-bitowym systemie operacyjnym lub 32-bitowym CPU. Kompilator IIUC wygeneruje kod do wykonywania 64-bitowej arytmetyki przy użyciu rejestrów 32-bitowych. Ale jeśli jest to zbyt wolne, być może będę musiał użyć bardziej zróżnicowanego sposobu radzenia sobie z wartościami czasu, co może utrudnić utrzymanie oprogramowania.

Co mnie interesuje:

jakie czynniki wpływają na wyniki tych operacji? Prawdopodobnie kompilator i wersja kompilatora; ale czy system operacyjny czy marka / model procesora również na to wpływają? Czy zwykły 32-bitowy system będzie używał 64-bitowych rejestrów nowoczesnych procesorów?które operacje będą szczególnie powolne, gdy są emulowane na 32-bitowym? Albo który nie będzie miał prawie żadnego spowolnienia?czy istnieją jakieś wyniki testów porównawczych dla używania int64_t / uint64_t w systemach 32-bitowych?czy ktoś ma własne doświadczenia na temat tego wpływu na wydajność?

Interesuję się głównie g ++ 4.1 i 4.4 w Linuksie 2.6 (RHEL5, RHEL6) na systemach Intel Core 2; ale byłoby również miło wiedzieć o sytuacji dla innych systemów (takich jak Sparc Solaris + Solaris CC, Windows + MSVC).

questionAnswers(4)

yourAnswerToTheQuestion