Was ist Programmoptimierung?
Bei der Programmoptimierung wird ein Computerprogramm so modifiziert, dass das Programm schneller ausgeführt wird, weniger Ressourcen verbraucht oder im Allgemeinen effizienter funktioniert. Die Aufgabe der Optimierung kann von einigen Programmiersprachencompilern automatisch ausgeführt werden, absichtlich unter Verwendung eines Optimierungsprogramms, oder manuell von Programmierern, die den Quellcode durchlaufen und versuchen, bestimmte Verbesserungen vorzunehmen. Im Allgemeinen wird die Programmoptimierung unter Berücksichtigung eines bestimmten Zwecks durchgeführt, da nur sehr wenige allgemeine Optimierungen an einem Programm vorgenommen werden können, die den optimierten Zustand eines anderen Teils des Programms, dh eines Programms, in der Regel nicht beeinträchtigen optimiert werden für Geschwindigkeit oder Ressourcennutzung, aber in der Regel nicht beide. Eine Komplikation, die bei einigen Optimierungsarten auftreten kann, besteht darin, dass viele Programmiersprachen auf hoher Ebene eine so große Abstraktionsebene zwischen nativem Code und der Computersprache bieten, dass die Optimierung auf allen Plattformen in allen Situationen schwierig oder unmöglich zu implementieren ist, insbesondere bei interpretierte Sprachen, die eine Just-in-Time-Kompilierung (JIT) verwenden.
Ein wichtiges Konzept bei der Programmoptimierung ist die Idee, dass eine Optimierung normalerweise mit einem Preis verbunden ist. Ein Beispiel hierfür ist, dass bei einer Optimierung eines Codeteils für eine schnellere Ausführung die Erhöhung der Geschwindigkeit zu Lasten der Codelesbarkeit, der Speichernutzung, der Programmflexibilität oder einer Reihe anderer Kosten gehen kann. Dies bedeutet, dass die Programmoptimierung ein gezielter Prozess sein muss, mit dem Ziel, dass ein Aspekt eines Programms besser funktioniert und gleichzeitig bereit ist, die Effizienz anderer Aspekte zu opfern.
Verschiedene Arten der Programmoptimierung können in verschiedenen Phasen der Programmentwicklung durchgeführt werden. Während des Entwurfs kann eine umfassende Optimierung durchgeführt werden, indem sichergestellt wird, dass ein Programm effektiv ausgeführt wird. Bei der Arbeit mit dem eigentlichen Quellcode kann es zu Optimierungen gehören, sicherzustellen, dass keine überflüssigen Befehle, wiederholten Aufrufe oder schlecht geschriebenen Funktionen vorhanden sind. Bei der Kompilierung werden viele Optimierungen automatisch vom Compiler durchgeführt und können vom Programmierer durch die Verwendung verschiedener Compiler-Schalter oder -Anweisungen geleitet werden.
Automatische Optimierungen, wie sie bei einem Compiler oder einem Programm zur Dedication-Optimierung auftreten können, können häufig Tricks beinhalten, die zu komplex sind, um für menschliche Programmierer praktikabel zu sein. Dies kann das Verschieben von Anweisungen in einem Programm beinhalten, so dass diese in einer für den Prozessor effizienteren Weise ausgeführt werden. Dabei können auch Ressourcen wie Speicherblöcke absichtlich verschoben werden, damit auf sie schneller zugegriffen werden kann. Die meisten Programmoptimierungen erfolgen automatisch auf Compilerebene.
Eine Schwierigkeit bei wiederholter oder aggressiver Programmoptimierung besteht darin, dass es im Allgemeinen schwieriger wird, ein Programm zu anderen Zwecken zu ändern, z. B. zum Hinzufügen von Funktionen oder zum Beheben von Fehlern. Dies kann der Fall sein, wenn Optimierungen festgelegte Programmverhalten sperren, die nicht einfach geändert oder an neuen Code angepasst werden können, ohne dass alle Optimierungen rückgängig gemacht werden müssen. Ein größeres Problem ist, dass ein optimiertes Programm in vielen Fällen nicht mehr lesbar ist, da Tricks und Verknüpfungen anstelle von kurzen Befehlen und klassischen Kontrollstrukturen verwendet werden. Aus diesen Gründen gibt es häufig eine Stufe der Programmoptimierung, bei der das Beenden akzeptabel ist, obwohl drastische Codeänderungen dazu führen können, dass ein Programm etwas effizienter arbeitet.