2016-08-31 3 views
0

Ich verwende AMD FX 4300 mit 3.8GHz, dh 3.8G Uhren pro Sekunde. Aber wenn ich den Befehl CLOCKS_PER_SEC ausführen zeigt es etwas anderes.Ich brauche Hilfe zu verstehen CLOCKS_PER_SEC

#include <time.h>  
#include <stdio.h> 

int main()  
{  
    printf("%lu\n",CLOCKS_PER_SEC); 

    return 0; 
} 

es zeigt: 1000

Ist es richtig?

Gibt es ein Problem in meinem Prozessor oder die Arbeit dieses Programms?

+1

In diesen Tagen würde ich einfach 'std :: chrono' verwenden – drescherjm

+3

*** Gibt es ein Problem in meinem Prozessor oder die Arbeit dieses Programms? *** Ich sage weder. 'CLOCKS_PER_SEC' misst keine CPU-Zyklen. Auch wenn es heute nicht so gut ist, dass deine CPU den Multiplikator sowieso dynamisch anpasst. – drescherjm

+0

'es zeigt: '1000'' - es ist alles deine Schuld. Beenden Sie die Ausführung eines nicht POSIX-konformen Systems und Sie sehen die Leistung [um 1000 erhöht] (http://en.cppreference.com/w/cpp/chrono/c/CLOCKS_PER_SEC): D –

Antwort

1

Setzen Sie andere Probleme beiseite, CLOCKS_PER_SEC ist nicht zuverlässig.

zum Beispiel (see the linux clock man page):

POSIX verlangt, dass CLOCKS_PER_SEC 1000000 unabhängig von der tatsächlichen Auflösung entspricht.

+2

Das bedeutet nicht, dass es nicht zuverlässig ist, Sie können sich darauf verlassen, dass es "1000000" ist, so wie POSIX es definiert, jedes Mal, wenn Sie es aufrufen. Das Problem, von dem ich denke, dass Sie darauf hinweisen, ist, dass es wenig Korrelation gibt zwischen dem, was Sie verwenden, CLOCKS_PER_SEC für und Ihrem Prozessor tickt. –

+0

@ DavidC.Rankin das ist meistens wahr, aber nicht jeder implementiert die POSIX-Anforderung. Ich denke also, beide sind wahr, da Sie sich auf den meisten Systemen (aber nicht auf allen) auf den POSIX-Wert verlassen können. – Myst

+1

Es gab ein kleines Augenzwinkern und ein Nickerchen im Kommentar über ':)' –

Verwandte Themen