1 Befehl in Hochsprache entspricht x Befehlen in Maschinensprache
-
Hallo zusammen,
ich suche eine Angabe wie: 1 Befehl in Hochsprache entspricht x Befehlen in Maschinensprache. Hat jemand sowas schon mal gelesen? Darf auch gern eine ungefähre Angabe sein, wie "Faktor 100".
Da ich die Angabe für eine Arbeit an der Hochschule brauche, wäre es nett, wenn Ihr auch eine Quelle dazu hättet!
Tausend dank im Voraus!
-
Rodent Bait schrieb:
1 Befehl in Hochsprache entspricht x Befehlen in Maschinensprache.
Ein Auto fährt wieviel schneller als eine Kutsche?
Unmöglich zu sagen, weil ein Auto von 30 bis 300kmh alles fahren kann
-
Selbst erarbeiten.
-
Moin Moin
Ich glaube euer Prof will euch testen.
Was für ein Befehl?
x++ ist nur eine relativ einfache Operation auf ASM Ebene.
Aber mal schnell 1 Object mit 5k Fields und 13k Methoden zu erzeugen ist nur eine Zeile in Java und x>>>1 Zeile in ASM.
Denk noch mal drüber nach.cu CodeHure
-
Unmöglich zu sagen, weil ein Auto von 30 bis 300kmh alles fahren kann
Ja, das ist schon klar.
Aber so einen Richtwert, ob es eher 10 oder eher 10000 Befehle sind, sowas müsste es doch irgendwo geben.
Und: Sowohl "in einem Buch schauen" als auch "Experten befragen" sind m.E. Varianten von "selbst erarbeiten".
Viele Grüße,
Rod.PS: Oh, und es geht nicht um eine Frage in einer Übung oder so. Ich möchte in meiner Bachelorarbeit lediglich einen Vergleich anstellen zu dem Verhältnis von Befehlen in der Eingabesprache eines Applikationsgenerators zu Befehlen im ausgegebenen Hochsprachen-Code. Aber dazu brauche ich eben einen Vergleichswert.
-
Rodent Bait schrieb:
Aber so einen Richtwert, ob es eher 10 oder eher 10000 Befehle sind, sowas müsste es doch irgendwo geben.
Es variiert.
zB können es auch wenigerDenn hohe Abstraktion bringt einen ganz anderen Blick auf die Struktur und kannst dadurch gänzlich andere Wege gehen.
In C++ hast du zB Zero Abstraction Cost. dh, dass zB ein Function Object (welches ja die Abstraktion eines Funktionszeigers ist) nicht mehr kostet als ein roher Funktionszeiger. Natürlich mit mehr flexibilität. Es kostet aber nichts, daher auch nicht mehr produzierten Low-Level code, weil alles auf einer höheren Ebene aufgelöst wird.
-
Da gibt es kein Richtwert. Viele Anweisungen kannst du ohne Probleme 1:1 umsetzen, gerade in C.
Mach doch lieber so etwas, dass du ein Programm schreibst und dir anhand dessen das Verhätlniss ausrechnest.
-
Rodent Bait schrieb:
Unmöglich zu sagen, weil ein Auto von 30 bis 300kmh alles fahren kann
Ja, das ist schon klar.
Aber so einen Richtwert, ob es eher 10 oder eher 10000 Befehle sind, sowas müsste es doch irgendwo geben.
Das ist ihmo wirklich extrem schwer zu sagen. Ein Programmierer Anfänger schreibt wahrscheinlich viel mehr "Befehle" (<- Begriff afaik gar nicht definiert) um das zu erreichen, was ein Profi mit weitaus weniger Code erreichen kann. Aber auch das ist schon sehr stark pauschalisiert.
Und für alle Hochsprachen allgemein kann man so einen Wert wahrscheinlich überhaupt nicht angeben. Um das gleiche Ergebnis in C++ wie in Programmiersprachen wie Delphi oder Smalltalk oder Whitespacezu erziehlen ist oft mehr Code nötig (ohne Gewähr. Ich kenn mich mit den anderen Sprachen leider auch nicht so gut aus).
EDIT: Andererseits unterstützt C++ Templates, die einem viel Schreibarbeit abnehmen können...
-
kingruedi schrieb:
Da gibt es kein Richtwert. Viele Anweisungen kannst du ohne Probleme 1:1 umsetzen, gerade in C.
Meinst du damit 1 C-Anweisung in 1 Assembleranweisung?
-
interpreter schrieb:
Meinst du damit 1 C-Anweisung in 1 Assembleranweisung?
Oft: ja.
-
Ja, bei Anweisungen stimmt das wohl.
Endet ja oft nur in einem bedingten Sprungbefehl und einem Label.
-
warum compilierst du nicht einfach ein paar kleinere c-programme mit einem etwas älterem compiler der erst nach assembler umwandelt bevor er maschinencode draus macht?
dann kannste doch gut vergleichen.
-
borg schrieb:
warum compilierst du nicht einfach ein paar kleinere c-programme mit einem etwas älterem compiler der erst nach assembler umwandelt bevor er maschinencode draus macht?
Warum braucht man da einen älteren Compiler?
-
weil modernere imo nicht mehr den umweg über assembler gehen.
edit:
oder doch:man gcc schrieb:
-S weist den Compiler an, den erzeugten Code als Assembler-Quelltext auszugeben
man kann ihm aber sagen er solls trotzdem machen
macht sich doch bestimmt gut wenn du 2 kleine beispiel c++-programme mit den dazugerhörigem assembler-code in deine bachelorarbeit machst, als einfach irgendwelche magischen zahlen aufzutischen die keiner nachvollziehen kann.
-
der gcc macht immer assembler, er gibt ihn nur nicht aus
-
Da hilft wohl nur Statistik... 2-3 Programme nehmen, die Anweisungen der Hochsprache zählen, und die Anzahl der Opcodes ermitteln.
Danach Verhältnis bilden. Die Masse an Übersetzungen gibt dann eine ganz gute Aussage, und deckt auch die Extremfälle "1 Hochsprachenanweisung => 0 Maschinenbefehle" und "1 Hochsprachenanweisung => 1000 Maschinenbefehle" ab.
Luke, nutze die Macht ... des Gesetzes der großen Zahlen.