Machen Klassen und Unterprogramme C++ langsam?
Hallo!
Ich habe mir die Herausforderung gestellt, ein einfaches 3D Spiel in C++ (ohne eine Engine sondern alles alleine) zu programmieren. Das Programm soll natürlich sehr schnell laufen. Deshalb habe ich auch C++ gewählt. Nun frage ich mich, ob ich Klassen und Unterprogramme nutzen "darf" oder dies lieber vermeiden soll.
Mit Klassen mein ich z.B. eine Klasse "Pen", die lauter Linien, die am ende einen Würfel ergeben auf ein Fenster zeichnet.
Machen Klassen und Unterprogramme C++ "viel" langsamer?
Und falls ja, sollte ich dann gleich in C programmieren? (Also C++ ohne Klassen, denn die nutze ich ja dann eh nicht)
Vielen Dank im Voraus!
2 Antworten
Ineffizientes programmieren macht alles langsamer... und du muss davon ausgehen, dass du selbst ineffizient programmierst.
Extremes Beispiel: Wenn du eine professionelle Engine verwendest, kann diese vielleicht mehrere Prozessorkerne und die Grafikkarte zur Berechnung verwenden - dann geht das natürlich viel schneller, als wenn du mit for-Schleifen einzelne Linien zeichnest.
Eigentlich brauchst du dir erst mal um die Effizienz von Klassenverwendung keine Gedanken zu machen, da gibt es bestimmt viel mehr Optimierungspotential an anderen Stellen. An einem normalen PC merkst du das nicht, wenn du nicht Millionen Objekte erstellst, etc... Ja, auf Mikroprozessoren gibt es eigene Konzepte für C++, die Effizienz verbessern. Methoden, die zur Laufzeit aufgelöst werden (virtual/vererbt überladene Methoden) sind minimal langsamer als andere.
Natürlich geht das... Der erste Schritt wäre Multithreading, also das Zerlegen des Programmes in Teile, die parallel ablaufen können. Ich denke, dass eigentlich schon das Betriebssystem Threads auf verschiedene CPU-Kerne verteilen können sollte.
Damit verbunden sind dann eigene Konzepte zur Synchronisation, wie z.B. Mutex/Semaphor und oder zum Beispiel bei Berechnungen die Zerlegung in unabhängige Teile.
Grafikprozessoren ansteuern geht heutzutage - denke ich - nur mit entsprechenden Frameworks/Bibliotheken. Aber ganz eherlich: Ich denke, das ist in deinem Fall noch mit Kanonen auf Spatzen geschossen.
Ich würde dir auch nicht raten zu versuchen, bis ins letzte Detail zu optimieren - Menschen sind da eh nicht so gut, wie moderne Compiler. Besser ist es, wenn der Code übersichtlich strukturiert bleibt - davon hast du persönlich auch mehr.
Also sollte ich nun eine Klasse "Pen" erstellen oder keine Klassen nutzen, und den Code einfach in das Hauptprogramm in eine while Schleife schreiben?
Unbedingt mit Funktionen, Klassen und guter Strukturierung arbeiten. So, wie ich das sehe, hast du einen PC zur Verfügung und nicht nur einen Mikrocontroller, wie z.B. aus einem alten Gameboy... du brauchst dir um Ressourcen (Prozessor, Speicher) erst mal nahezu keine Gedanken zu machen.
Wir (die Menschen) konnten in der Geschichte der Programmierung nur dadurch immer komplexere Aufgaben bewältigen und schneller zu Lösungen kommen, weil wir stärker strukturiert und Blöcke (wieder)-verwendet haben.
Du als ein Hobbyprogrammer hast so entschieden, dass du keinen graphischen Motor benutzen wirst, sondern auch das selbst programmierst. Du kannst natürlich nicht so gut programmieren, wie Experte. So sollst du nicht staunen, dass das nicht genug schnell ist.
Und ja, objektorientiertes Programmieren ist nicht dafür, dass man schnellere Programmen schreiben könnte. Es ist dafür, dass man schneller programmieren kann.
Kann ich selbst in C++ auch mehrere Prozessorkerne nutzen und der Grafikkarte spezielle Aufgaben zuteilen? Falls ja, wie? Tut mir leid, ich bin jemand, der alles selbst programmieren will. Egal wie schwierig es ist.