В нашей библиотеке С++ в настоящее время используется time_t для хранения значений времени. В некоторых местах мне нужна точная секундная точность, поэтому в любом случае вам понадобится больший тип данных. Кроме того, было бы полезно обойти проблему Год-2038 в некоторых местах. Поэтому я думаю о полном переключении на один временной класс с базовым значением int64_t, чтобы заменить значение time_t во всех местах.
Теперь мне интересно узнать о влиянии таких изменений на производительность при запуске этого кода в 32-разрядной операционной системе или 32-битном процессоре. IIUC компилятор будет генерировать код для выполнения 64-разрядной арифметики с использованием 32-разрядных регистров. Но если это слишком медленно, мне, возможно, придется использовать более дифференцированный способ обработки значений времени, что может затруднить поддержку программного обеспечения.
Что меня интересует:
- Какие факторы влияют на эффективность этих операций? Вероятно, версия компилятора и компилятора; но влияет ли на это операционная система или процессор/модель процессора? Будет ли обычная 32-разрядная система использовать 64-разрядные регистры современных процессоров?
- Какие операции будут особенно медленными при эмулировании на 32-битных? Или что почти не будет замедления?
- Есть ли какие-либо существующие результаты тестов для использования int64_t/uint64_t в 32-битных системах?
- У кого-нибудь есть собственный опыт в отношении этого воздействия?
Меня больше всего интересуют g++ 4.1 и 4.4 на Linux 2.6 (RHEL5, RHEL6) на системах Intel Core 2; но было бы неплохо узнать о ситуации для других систем (например, Sparc Solaris + Solaris CC, Windows + MSVC).