C Programmlaufzeit

Hi Leute,
Ich programmiere nun schon über ein Jahr C.
Nun hab ich aber ein Problem. Wie kann ich die Programmlaufzeit messen?

Am einfachsten wäre das ja, wenn ich zu Beginn und Ende des Programms einer Variable den Wert time(0) gebe und die Differenz Ausgebe.
Jedoch bekomme ich da nur die Sekunden. Ich möchte es aber ein bisschen genauer haben. Also in ?Sekunden wenn möglich.

Könnte mir jemand sagen wie das geht? Google ist da nicht sehr hilfreich.

mfg withers
 
Hallo,
naja bei Google nach c+Millisekunden suchen bringt diverse Treffer. Natürlich muss man immer auf das Betriebssystem und ggf. auch auf den Compiler achten.
 
naja bei Google nach c+Millisekunden suchen bringt diverse Treffer.
?Sekunden sind afaik Mikrosekunden. Ich bezweifle allerdings, dass man die Zeit seit dem Programmstart so genau messen kann, da die Initialisierung des Timers bestimmt (nicht sicher) Zeit verschlingt.
 
Ich habe XP und benutze den Compiler Quincy 2005.

Aber wie wird die Zeit beispielsweise bei Sortieralgoritmen gemessen? Werden da die Schritte gezählt und anschließend mit Zeit pro Schritt multipliziert?
Oder wie Funktioniert es da?
 
Das Laufzeitverhalten mit der Stoppuhr zu stoppen ist keine gute Idee. Bestimme lieber die Komplexitaet deiner Algorithmen, daraus kannst du sehr genau ableiten, wie gut die sind und bei welchen Werten er besonders optimal oder besonders schlecht laeuft.
 
Und wie mach ich das mit der Komplexiät?

Ich möchte die Laufzeiten verschiedener Sortieralgoritmen messen oder irgendwie einen Wert bekommen, mit dem ich einen selbstgemachten mit einem bekannten Sortieralgorithmus vergleichen kann.
 
1. Treffer bei http://www.google.de/search?q=timeit.exe+usage und da findet man doch glatt:

Code:
TimeIt Syntax

timeit [-f FileName] [-a] [-c] [-i] [-d] [-s] [-t] [-k KeyName | -r KeyName] [-m Mask] [Command]

-f FileName
Specifies the name of the database file where TimeIt keeps a history of previous timings. The default file name is .\Timeit.dat
-k KeyName
Specifies the keyname to use for this timing run.
-r KeyName
Specifies the key name to remove from the database. If the key name is followed by a comma and a number, the slowest time (positive number) or the fastest time (negative number) for that key name will be removed.
-a
Specifies that TimeIt should display average of all timings for the specified key name.
-i
Ignores nonzero return codes from the program run by TimeIt.
-d
Shows detail for average.
-s
Suppresses systemwide counters.
-t
Specifies tabular output.
-c
Forces a re-sort of the database.
-m Mask
Specifies the processor affinity mask.
Command
Specifies the command to time.
 
Oft will man nicht die ganze Laufzeit von Start bis Ende messen, sondern nur im Code selbst mal ein bisschen messen.Zum Beispiel nur eine Funktion. Unter Java ist es durchaus üblich currentTimeMillis() zu verwenden wenn man keinen Profiler hat und unter Windows und C/C++ gibt es die Funktion
GetTickCount()
(http://msdn.microsoft.com/en-us/library/ms724408(VS.85).aspx) mit der man ähnliches machen kann.
 
Original von withers
Und wie mach ich das mit der Komplexiät?

Ich möchte die Laufzeiten verschiedener Sortieralgoritmen messen oder irgendwie einen Wert bekommen, mit dem ich einen selbstgemachten mit einem bekannten Sortieralgorithmus vergleichen kann.

http://de.wikipedia.org/wiki/Komplexität_(Informatik)

Zu bereits bekannten Sortierverfahren ist auch schon die Komplexitaet bestimmt: http://de.wikipedia.org/wiki/Sortieralgorithmen#Vergleichsbasiertes_Sortieren

Anders als mit der Komplexitaet kann man Algoritmen nicht vergleichen, da es ansonsten immer von verschiedenen Faktoren abhaengt.
 
Original von withers
Und wie mach ich das mit der Komplexiät?

Ich möchte die Laufzeiten verschiedener Sortieralgoritmen messen oder irgendwie einen Wert bekommen, mit dem ich einen selbstgemachten mit einem bekannten Sortieralgorithmus vergleichen kann.
Du überlegst. Ich mach es mal für bubblesort vor:
Du hast n Elemente. Nach dem 1. Durchlauf(es sind n-1 vergleiche) weist du, dass das n-te Element an der richtigen Stelle ist. Im 2. Druchlauf sind es also nur n-2 Vergleich. So geht das weiter bin du alle hast. Die Anzahl der Vergleiche ist also:
n*(n-1 + n-2 ...n-(n-1))
Man vereinfacht das Ganze meist zu n^2. Ich hoffe das ist einigemaßen Verständlich.

Du kannst auch in deine Vergleichsfunktion einen Zähler einbauen, das ist aber ungenau und unelegant.
 
Zurück
Oben