Поведение CLOCKS_PER_SEC в разных операционных системах
Я запускал код cpp, но одна вещь, которую я заметил, что в Windows 7 CLOCKS_PER_SEC в коде C++ дает 1000, в то время как на linux fedora 16 - 1000000. Кто-нибудь может оправдать такое поведение?
2 ответа
Что оправдать? CLOCKS_PER_SEC
определяется реализацией и может быть чем угодно. Все это указывает на единицы, возвращаемые функциейclock()
, Это даже не указывает на разрешение clock()
: Posix требует, чтобы он был 1000000, независимо от фактического разрешения. Если Windows возвращает 1000, это, вероятно, тоже не фактическое разрешение. (Я считаю, что у моего Linux-бокса разрешение 10 мс, а у Windows - 15 мс.)
В основном реализация clock()
Функция имеет некоторую свободу действий для различных операционных систем. В Linux Fedora часы тикают быстрее. Это тикает 1 миллион раз в секунду.
Этот тактовый такт отличается от тактовой частоты вашего процессора на другом уровне абстракции. Windows пытается сделать количество тактов равным количеству миллисекунд.
Этот макрос расширяется до выражения, представляющего количество тактов в секунду, возвращаемое функцией clock.
Разделив количество тактов на это выражение, вы получите количество секунд.
CLK_TCK является устаревшим псевдонимом этого макроса.
Ссылка: http://www.cplusplus.com/reference/clibrary/ctime/CLOCKS_PER_SEC/
Вы также должны знать, что реализация Windows не предназначена для настоящих приложений реального времени. 1000 тиковых часов получают путем деления аппаратных часов на степень 2. Это означает, что они фактически получают 1024 тиковых часов. Чтобы преобразовать его в 1000 тиковых часов, Windows пропустит некоторые тики, то есть некоторые тики будут медленнее других!
Отдельные аппаратные часы (не часы процессора) обычно используются для синхронизации. Ссылка: http://en.wikipedia.org/wiki/Real-time_clock