warum ist ASM schneller ald C++

...komplette Frage anzeigen

3 Antworten

Du als Mensch kannst dein Programm normalerweise besser optimieren als ein Compiler das kann (zum Verständnis: ASM entspricht bereits der Maschinensprache, es wird da also fast nichts mehr optimiert). Das liegt daran, dass du den gesamten Kontext kennst und vor allem auch das Ziel, das du mit deinen Befehlen verfolgst. Der Compiler kann aber nur allgemein übersetzen, was du geschrieben hast. Dazu kommt noch, dass die Objektorientierung das ganze deutlich komplexer macht, weshalb der Compiler noch schlechter optimieren kann. Aus genau diesem Grund ist C++ auch langsamer als C - wenn auch nur ein kleines bisschen.

Antwort bewerten Vielen Dank für Deine Bewertung

Die Assembler-Befehle sind ja nur menschenlesbare Bezeichnungen ("Mnemonics") für Maschinenbefehle. Im Fall von Assembler programmierst du also praktisch direkt in Maschinensprache.

Bei einer Hochsprache wie C++ muss der Compiler hingegen erst deine Hochsprachen-Anweisungen in mehrere Maschinenbefehle umwandeln. Dabei muss er die verwendeten Datentypen auf die vom Prozessor unterstützten reduzieren, muss Variablen auf Register mappen, muss objektorientierten in prozeduralen Code umwandeln - und vieles mehr. Diese Schritte kann in manchen Fällen der Programmierer effizienter durchführen als ein Compiler, da ersterer ja den Zweck des Programmes kennt, letzterer hingegen nicht.

Compiler sind allerdings heutzutage in dieser Hinsicht schon sehr gut, sodass man meist nur in sehr zeitkritischen Situationen auf Assembler ausweicht.

Antwort bewerten Vielen Dank für Deine Bewertung

ASM ist nicht schneller als C++.

Da aber C++-Compiler nicht genau wissen, was du vorhast und sich aus Prinzip an gewisse Optimierungen nicht ranwagen, während Assmeblersprache direkt deine Mnemonics in eindeutige Maschonenbefehle übersetzen lässt, arbeitet ein in Assmebly language geschriebens Programm oft schneller, als ein C++-Programm.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?