2013-11-12 3 views
9

Я пытался понять различные макросы sysconf. Я написал программу, как показано ниже.sysconf (_SC_CLK_TCK), что он возвращает?

int main() 
{ 
    fprintf(stdout, "No. of clock ticks per sec : %ld\n",sysconf(_SC_CLK_TCK)); 
    return 0; 
} 

Я всегда получить результат, как 100.I бегаю его на процессоре, который работает на частоте 2.93GHz.What означает число 100 означает в точности.?

ответ

10

Это всего лишь количество тактов в секунду, в вашем случае ядро ​​настроено на 100 часов в секунду (или 100 Гц часов).

+0

вы, кажется, предполагают, что это никоим образом не связано с тактовой частоты процессора? – liv2hak

+7

@ liv2hak нет, это не связано, это количество раз, когда таймер прерывает CPU для планирования и других задач, 100 Гц является общим значением, более высокая частота равна более высокому разрешению таймера и более накладным расходам. – iabdalkader

+1

Ну, не совсем ... Современные ядра Linux используют динамическую тактовую частоту в зависимости от текущей нагрузки (т. Е. Не более периодических тиков). – Claudio

0

Количество тактов в секунду может быть найдена с помощью системного вызова sysconf,

printf ("_SC_CLK_TCK = %ld\n", sysconf (_SC_CLK_TCK)); 

Типичное значение тактов в секунду равно 100. То есть, в этом случае, есть часы тик каждые 10 миллисекунд или 0,01 секунды. Чтобы преобразовать значения clock_t, возвращенные временем, в секунды нужно разделить на количество тактов в секунду. Пример программы с использованием времени и вызовов sysconf системы (_SC_CLK_TCK) есть

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <time.h> 
#include <sys/times.h> 

main() 
{ 
    clock_t ct0, ct1; 
    struct tms tms0, tms1; 
    int i; 

    if ((ct0 = times (&tms0)) == -1) 
     perror ("times"); 

    printf ("_SC_CLK_TCK = %ld\n", sysconf (_SC_CLK_TCK)); 

    for (i = 0; i < 10000000; i++) 
     ; 

    if ((ct1 = times (&tms1)) == -1) 
     perror ("times"); 

    printf ("ct0 = %ld, times: %ld %ld %ld %ld\n", ct0, tms0.tms_utime, 
     tms0.tms_cutime, tms0.tms_stime, tms0.tms_cstime); 
    printf ("ct1 = %ld, times: %ld %ld %ld %ld\n", ct1, tms1.tms_utime, 
     tms1.tms_cutime, tms1.tms_stime, tms1.tms_cstime); 
    printf ("ct1 - ct0 = %ld\n", ct1 - ct0); 
} 

Источник

http://www.softprayog.in/tutorials/linux-process-execution-time

+0

Пример кода не _use_ '_SC_CLK_TCK' ни для чего. –

Смежные вопросы