|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Sergey Kubushin 2:5020/400 08 Oct 2001 08:22:18 To : Vladimir Mosgalin Subject : Re: несусветное поведение clock() -------------------------------------------------------------------------------- Vladimir Mosgalin <Vladimir.Mosgalin@p17.f1041.n5030.z2.fidonet.org> wrote: > Hello Sergey. > 07 Окт 01 20:10, Sergey Kubushin wrote to Andrew Rodionoff: > >> Greetings, all > >> Hарод, я худею. Валял тут как-то простенькую приблуду на питоне и > >> вдруг обнаружил, что time.clock() возвращает каждый раз одно и то же > >> значение. Делаю программульку вида: #include <time.h> main() { > >> clock_t t; > >> while (1) { > >> sleep(1); > >> t = clock(); > >> printf("%i\n",t); > >> } > >> } > >> Та же картина. Перепробовал ядра 2.2.5, 2.2.14, 2.2.19, glibc-2.1.1, > >> 2.1.3-15, 2.1.3-22. Это же ужас. strace показывает, что буфер при > >> вызове times(...) заполняется какой-то х-ней. У кого-нибудь такое > >> было? > SK> А чему ты, собственно, удивляешься? Компиллятор соптимизировал твою > SK> программку. Ему-то откуда знать, что clock() каждый раз новое значение > SK> возвращает? > SK> Объяви свою переменную volatile и волосы станут шелковистыми. Именно > SK> для этого оно и предназначено. > Бред какой-то. А почему он clock соптимизировал? А если бы там что-то другое > было? Тогда как он догадался, что sleep оптимизировать не надо? Потому что sleep() не возвращает значения. А соптимизировал он не clock(), а оператор присваивания, повторяющийся в цикле. Это достаточно частая ошибка (например, при определенной оптимизации не будет работать цикл, читающий что-то из памяти и проверяющий не изменилось ли значение). Hо здесь таки да, может быть и то, что просто процессор ничего не наработал, поэтому clock() действительно возвращает одинаковое значение. Хотя это и не освобождает от необходимости использования модификатора volatile - одна и та же программа может работать по-разному в зависимости от цифирки после -O, от наличия -g и т.п. Использование volatile позволяет этого избежать. - --- Sergey Kubushin Sr. Unix Administrator Metavante, Inc. Phone: 702-567-8857 874 American Pacific Dr, Fax: 702-567-8808 Henderson, NV 89014 --- ifmail v.2.15dev5 * Origin: Metavante, Inc. (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/75916b30c689.html, оценка из 5, голосов 10
|