Machen Klassen und Unterprogramme C++ langsam?

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.

Pixie633 
Fragesteller
 13.05.2023, 19:08

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.

0
kmkcl  13.05.2023, 19:39
@Pixie633

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.

0
Pixie633 
Fragesteller
 13.05.2023, 19:44
@kmkcl

Ist das Programm, wenn ich alles alleine programmeire, theoretisch schneller, genauso schnell oder sogar langsamer als wenn ich einfach OpenGL, DirectX oder was auch immer nutze?

0
kmkcl  13.05.2023, 19:48
@Pixie633

Kommt sicher auf die Komplexität an. Je komplexer, desto besser werden die Bibliotheken - genau dafür sind sie da. Und wenn man bedenkt, wie viele Menschen mit wie viel Wissen/Erfahrung an solchen Bibliotheken entwickeln, ist das sicher auch gerechtfertigt. ;)

0
Pixie633 
Fragesteller
 13.05.2023, 19:30

Also sollte ich nun eine Klasse "Pen" erstellen oder keine Klassen nutzen, und den Code einfach in das Hauptprogramm in eine while Schleife schreiben?

0
kmkcl  13.05.2023, 19:46
@Pixie633

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.

0

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.