000
01.01.2011, 21:39 Uhr
Hans
Library Walker (Operator)
|
Hi,
bei dem Programm unten erhält man die folgende Ausgabe:
Code: |
Version1 Execution time was 2 seconds Version2 ############## ... ############## (insgesamt 9920 mal) Execution time was 47811 seconds
|
Die 47811 Sekunden entsprechen 13 Stunden und ein paar Minuten! Nun zeigte der Taskmanager allerdings eine CPU-Zeit von 10 Stunden an, als ich das letzte mal drauf geguckt habe. Allerdings ist auch das für Testzwecke immer noch eine völlig unakzeptable Laufzeit, zumal das Programm nichts sinnvolles tut. Deshalb die Frage, ob und in wie weit sich die Laufzeiten vorher kalkulieren lassen, bzw. wie?
Hans
C++: |
/* Datei: zifstring.c
Beispiel String-Manipulation und die Aufgabe: "Nehme einen leeren String und haenge in einer Schleife 1.000.000 Mal den aktuellen Wert einer Integer-Variable hintereinander dran, durch Komma getrennt". */
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h>
void version1(); void version2();
int main() { clock_t start_time, end_time;
setbuf (stdout, NULL); // Ausgabepuffer abschalten; dient dazu, die // Lattenkreuze (#) unten kontinuierlich // auszugeben, und nicht "schwallweise". printf ("Version1\n"); start_time = clock(); version1(); end_time = clock(); printf( "Execution time was %lu seconds\n", (end_time - start_time) / CLOCKS_PER_SEC ); printf ("Version2\n"); start_time = clock(); version2(); end_time = clock(); printf( "Execution time was %lu seconds\n", (end_time - start_time) / CLOCKS_PER_SEC );
return 0; }
void version1() { char *foo, *p; int a;
foo = p = calloc(10000000, 1); for (a=0; a<1000000; a++) { p += sprintf(p, "%d, ", a); } free(foo); } void version2() { char *foo, temp[16]; int a; foo = calloc(10000000, 1); for (a=0; a< 1000000; a++) { sprintf(temp, "%d, ", a); strcat(foo, temp); if (a%100 == 0) // Dies dient nur dazu, anzuzeigen dass das Programm printf ("#"); // noch läuft, und nicht abgestürzt ist. } free(foo); printf ("\n"); }
|
P.S.: Ich bin gerade dabei, mir die Frage selbst zu beantworten, (API-Funktionen anstelle von clock() und einen Profiler benutzen) hab sie aber trotzdem mal hier rein gestellt, weil sie von allgemeinem Interesse sein dürfte. -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 01.01.2011 um 21:50 Uhr von Hans editiert. |