Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Alexander Dilevsky                   2:5020/400     08 Oct 2001  10:31:21
 To : Sergey Kubushin
 Subject : Re: несусветное поведение clock()
 -------------------------------------------------------------------------------- 
 
 
 "Sergey Kubushin" <ksi@cyberbills.com> wrote in message
 news:9pr9lb$rav$1@news.gamma.ru...
 
 > 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(),
 
 а
 
 > оператор присваивания, повторяющийся в цикле.
 
 Да где ж вы такую траву берете? Компилятор имеет право оптимизировать
 присваивание (в виде его полного исключения :)  _только_ если присвоенное
 значение больше нигде не используется. А здесь оно, очевидно, используется.
 
 Чтобы не быть голословным, привожу кусок cc -O6 -S test1.c от вышеуказанной
 программы:
 
 main:
         pushl %ebp
         movl %esp,%ebp
         .align 4
 .L8:
         call clock
         pushl %eax
         pushl $.LC0
         call printf
         addl $8,%esp
         jmp .L8
 
 clock() честно каждый раз вызывается, и его значение честно печатается.
 
 >
 > Это достаточно частая ошибка (например, при определенной оптимизации не
 > будет работать цикл, читающий что-то из памяти и проверяющий не изменилось
 > ли значение). Hо здесь таки да, может быть и то, что просто процессор
 
 ничего
 
 > не наработал, поэтому clock() действительно возвращает одинаковое
 
 значение.
 
 Именно.
 
 > Хотя это и не освобождает от необходимости использования модификатора
 > volatile - одна и та же программа может работать по-разному в зависимости
 
 от
 
 > цифирки после -O, от наличия -g и т.п. Использование volatile позволяет
 > этого избежать.
 
 ??? volatile относится только к переменным, и подразумевает, что значение
 переменной может быть изменено в любой момент времени извне того кода,
 который в данный момент компилирует компилятор.
 Функция же имеет право возвращать каждый раз разное значение.
 
 >
 > ---
 > Sergey Kubushin Sr. Unix Administrator
 > Metavante, Inc. Phone: 702-567-8857
 > 874 American Pacific Dr, Fax: 702-567-8808
 > Henderson, NV 89014
 --
 Alexander DIlevsky
 mailto:dil@cea.ru
 всего лишь Brainbench Master C programmer
 
 --- ifmail v.2.15dev5
  * Origin: Yandex Technologies Ltd. (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 несусветное поведение clock()   Andrew Rodionoff   07 Oct 2001 00:00:56 
 Re: несусветное поведение clock()   Sergey Kubushin   07 Oct 2001 20:10:09 
 несусветное поведение clock()   Vladimir Mosgalin   08 Oct 2001 00:05:50 
 Re: несусветное поведение clock()   Sergey Kubushin   08 Oct 2001 08:22:18 
 Re: несусветное поведение clock()   Alexander Dilevsky   08 Oct 2001 10:31:21 
 несусветное поведение clock()   Valentin Nechayev   08 Oct 2001 18:16:51 
 несусветное поведение clock()   Kirill Frolov   08 Oct 2001 21:15:44 
 Re: несусветное поведение clock()   Andrew Rodionoff   09 Oct 2001 02:10:02 
 несусветное поведение clock()   Anthony Nedviga   07 Oct 2001 19:27:07 
 Re: несусветное поведение clock()   Andrew Rodionoff   09 Oct 2001 02:10:05 
 Re: несусветное поведение clock()   Alexander Dilevsky   07 Oct 2001 21:37:13 
 Re: несусветное поведение clock()   Andrew Rodionoff   09 Oct 2001 02:10:03 
 Re: несусветное поведение clock()   Valentin Nechayev   08 Oct 2001 18:23:00 
 Re: несусветное поведение clock()   Andrew Rodionoff   09 Oct 2001 02:10:03 
 несусветное поведение clock()   Peter Irich   08 Oct 2001 23:48:16 
 несусветное поведение clock()   Alexander Stavitsky   09 Oct 2001 01:35:31 
Архивное /ru.linux/104678ab5de7d.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional