Hei Community,Zeit zum Löschen von Zeigern
Ich habe eine kleine Frage bezüglich der Löschung von Zeigern.
Ich arbeite mit Zeiger-zu-Zeiger-Matrizen der Dimension 1024x1024. Da ich sie dynamisch erstelle, lösche ich den zugewiesenen Speicherplatz für sie am Ende des Programms. Aber dies in der üblichen Schleife zu tun kostet ziemlich viel Zeit - ich habe etwa 2 Sekunden mit der Taktrate des Prozessors gemessen. Und 2 Sekunden ist RIESIG, wenn das Programm nur 15 Sekunden läuft - plus: die Funktion, die diese zugewiesenen Zeiger verwendet, wird mehr als nur einmal aufgerufen.
Hier ist das gemessene zeitkritischen Stück Code einschließlich der Messung:
time=clock();
for(i=0;i<xSize;i++){ //xSize is dynamic, but 1024 for the measurement
delete [] inDaten[i];
delete [] inDaten2[i];
delete [] copy[i];
}
delete inDaten; delete inDaten2; delete copy;
time=clock()-time;
time/=CLOCKS_PER_SEC;
Ist Zeiger immer so lange zu löschen? Oder mache ich nur Dinge falsch?
Ich hoffe, dass jemand hier mir helfen kann. Da ich ein ziemlich komplexes Programm optimiere, um schneller zu laufen, kann ich diese 2sec-Stück Code nicht verwenden. Es ist einfach zu langsam im Vergleich zu allen anderen Teilen. Trotzdem muss ich diesen Code dynamisch implementieren können. SmartPointers könnten hilfreich sein, aber wenn ich richtig verstehe, brauchen sie auch die Zeit, sich selbst zu löschen - nur zu einer anderen Zeit ...
Vielen Dank für Ihre Antworten!
Baradrist
EDIT: Ich fand heraus, nur, dass diese Lösch-Berechnungen Messung ziemlich langsam ist, weil ich es nicht in Release-Modus kompiliert hat. Da der Debugger ins Spiel kommt, habe ich diese (letztlich unrealistischen) Zahlen gemessen, die mir Kopfschmerzen bereiteten. Das endgültige Programm wird automatisch so weit optimiert, dass der Löschvorgang nahezu entfällt.
Wie auch immer: Danke für die hilfreichen Antworten! Sie haben mir eine Menge Zusatzwissen und Dinge zum Nachdenken gebracht !!!!
Was ist der Typ der Objekte in 'inDaten',' inDaten2' und 'kopieren'? Sind das nur Intarsien oder sowas, oder sind sie echte Objekte? –
Müssen Sie alles dynamisch zuweisen? Brauchen Sie so viele * separate * Zuweisungen? Ist es möglich, das Programm neu zu schreiben, um die Daten in weniger, größeren Zuordnungen zu speichern? – jalf
Auf meinem Netbook geht das Löschen von double [] nicht zum nächsten Takt, also entweder mit einem angehängten Debugger oder etwas teurem passiert in den Destruktoren der Elemente im Array. –