Hi zusammen.
Wie ja schon anderweitig erwähnt bin ich nun endlich dabei mein Wissen, so gut es mir möglich ist, um C++ zu erweitern.
Allerdings scheine ich dann doch hin und wieder mal zu stocken. In diesem Fall bei den Pointern.
Um mal auszuprobieren, was für ein Geschwindigkeitsvorteil sich aus der Benutzung von Pointern ergibt habe ich mir mal ein ganz simples Programm mit ein paar For-Schleifen geschrieben, in denen ein Zähler hochgezählt wird.
Die erste Grundlage des Programms sind drei normale Schleifen.
#include <iostream>
#include <time.h>
using namespace std;
int main(int argc, char *argv[])
{
double time1=0.0,time2=0.0, time3=0.0, timeStart;
int i, z, y;
int myInteger;
int *ptrMyInteger;
int *ptrY;
int test1, test2, test3;
ptrMyInteger = &myInteger;
ptrY = &y;
timeStart=clock();
for(i=0;i<=200000000;i++){
myInteger=i;
}
test1 = myInteger;
time1 += clock() - timeStart;
time1 = time1 / CLOCKS_PER_SEC;
timeStart=clock();
for(z=0;z<=200000000;z++){
*ptrMyInteger=z;
}
test2 = myInteger;
time2 += clock() - timeStart;
time2 = time2 / CLOCKS_PER_SEC;
timeStart=clock();
for(*ptrY=0;*ptrY<=200000000;*ptrY++){
*ptrMyInteger=*ptrY;
}
test3 = myInteger;
time3 += clock() - timeStart;
time3 = time3 / CLOCKS_PER_SEC;
cout << "Zeit 1 ohne Pointer: " << time1 << " Sekunden; myInteger=" << test1 << endl;
cout << "Zeit 2 mit Pointer myInteger: " << time2 << " Sekunden; myInteger=" << test2 << endl;
cout << "Zeit 3 mit Pointer myInteger und pointer Y: " << time3 << " Sekunden; myInteger=" << test3 << endl;
return 0;
}
Alles anzeigen
Die erste Schleife ist ja klar. Ganz normale Schleife, Zugriff normal über die Integervariable.
Die zweite Schleife benutzt halt den Pointer auf die Integervariable. Funktioniert ebenfalls.
In der dritten Schleife wollte ich es einfach mal etwas übertreiben und habe sowohl den Schleifenzähler als auch die Integervariable als Pointer in gebrauch. Dies funktioniert nicht.
Es ergeben sich zwei merkwürdige Phänomene.
Das erste ist, wenn ich das Programm öfter starte kommt es oft auch vor, dass Schleife zwei langsamer ist als Schleife 1. Ich kann darin kein Muster oder so erkennen, es scheint eher zufällig zu sein.
Das Zweite ist halt, offensichtlich kann man den Schleifenzähler nicht über den Pointer benutzen. Er durchläuft die Schleife gar nicht, 0 Sekunden, Wert von myInteger = 0.
Ich dachte ja ich hätte es mit den Pointern verstanden, offensichtlich mache ich aber dennoch einen Denkfehler. Kann mir einer sagen welcher das ist?