Informationen finden zu: BasicLowLevel C++ / Interne Funktionsweise



  • @axam sagte in Informationen finden zu: BasicLowLevel C++ / Interne Funktionsweise:

    @john-0 Hab ich auch schon mal überlegt. Nachteil:

    1. Assembler/Maschinencode muß meines wissens nach individuell für jede Hardware geschrieben werden.
    2. Größere Projekte können mit Assembler/Maschinencode nicht realisiert werden.

    Es geht darum zu verstehen, wie der Computer funktioniert. Es geht rein um Lerneffekte und nicht darum ein Programm wie MS Word mit Assembler nachzuprogrammieren. So etwas hat man schon zur Heimcomputerzeit auf einem Atari ST oder Amiga nur noch selten gemacht, in der Regel wurden die Programme damals schon in C oder einen ähnlichen Sprache geschrieben. Auf den 8Bit Heimcomputer sah das vielfach noch anders aus, da wurde in der Hauptsache Z80, 6502 oder 6800 Assembler genutzt.

    Es geht einfach darum, dass Du einige Verständnisprobleme hast, wie ein Computer funktioniert. Das kannst Du mit dem Erlernen von Assembler beheben. Als Plattform würde ich persönlich ARM x86-64 vorziehen, weil letztere ein ziemliches Stückwerk an Assembler nutzt. Man merkt es x86-64 einfach an, dass das einmal aus einem 8Bit Prozessor entwickelt wurde.


  • Mod

    Sogar irgendeiner der vielen Assembler-Simulatoren würde sehr beim Verständnis helfen. Vielleicht sogar mehr noch als das echte Ding, weil man Schritt für Schritt zugucken kann, was passiert. Ist aber weniger spannend als das Experiment am echten System.



  • @SeppJ sagte in Informationen finden zu: BasicLowLevel C++ / Interne Funktionsweise:

    Sogar irgendeiner der vielen Assembler-Simulatoren würde sehr beim Verständnis helfen. Vielleicht sogar mehr noch als das echte Ding, weil man Schritt für Schritt zugucken kann, was passiert. Ist aber weniger spannend als das Experiment am echten System.

    Dann böte sich sogar MMIX an, wenn man gewillt ist sich durch Knuths Werk zu arbeiten.



  • @Schlangenmensch
    Im Grunde habe ich genau dies, dank euch allen inzwischen gelernt.
    Ich kann mich also mehr oder weniger darauf Verlasen das bei von mir gewünschten Berechnungen der "return-Wert" das richtige Ergebnis liefert, ich werde jedoch niemals wissen, was mein Programm genau macht.

    Beispielsweise kann ich niemals einfach eine Schleife programmieren und mich dann darauf verlassen das diese so und so oft aufgerufen wird. Ergo sind Funktionen in ihrer Effizient für mich auch nicht direkt vergleichbar.
    Ich kann daher niemals mit Gewissheit sagen, wenn ich Funktion A so oder so gestalte und dann Funktion B aufrufe, dann ist das ganze effizienter/schneller als wenn ich beide Funktion durch Funktion C ersetze, die dafür doppelt so viele Schritte benötigt, da es ja sein könnte, das der Compiler Funktion C mit einer Multiplikation löst, während er bei den Funktionen A-B gezwungen ist zwei Additionen auszuführen. (Vereinfacht gesagt)
    Und wenn eine Funktion auch von ihrer Funktionsweise abhängig ist, sollte ich besser mal meinen gewünschten return-Wert hinterfragen und die Funktion umschreiben/aufsplitten.

    Ich Danke euch allen für diese Erkenntnis.
    Und auch dafür, daß ich, dank euch jetzt erkannt habe, daß ich mehr Augenmerk darauf legen muß, was genau ich als return-Wert haben will, anstatt meine Zeit damit zu verschwenden, mir Gedanken darüber zu machen wie ich das Programm am besten optimiere, indem ich den gewünschte return-Wert auf diese oder jene Weise berechne, damit dies dann auch am besten/effizientesten Weg geschieht. Denn dies wäre ja nur der beste/effizienteste Weg, wenn das Programm in allen von mir bedachten Fällen so übersetzt würde, wie es von mir ursprünglich gedacht war.
    DANKE

    PS.: MMIX klingt interesant. Muß zwar erstmal 'ne Nacht drüber schlafen, denke aber, ich werd mir das Buch kaufen.



  • @axam sagte in Informationen finden zu: BasicLowLevel C++ / Interne Funktionsweise:

    Ich kann mich also mehr oder weniger darauf Verlasen das bei von mir gewünschten Berechnungen der "return-Wert" das richtige Ergebnis liefert

    Ich kann mich also mehr oder weniger immer darauf verlassen, dass bei von mir gewünschten Berechnungen der "return-Wert" das richtige Ergebnis liefert.



  • @wob sagte in Informationen finden zu: BasicLowLevel C++ / Interne Funktionsweise:

    Ich kann mich also mehr oder weniger immer darauf verlassen, dass bei von mir gewünschten Berechnungen der "return-Wert" das richtige Ergebnis liefert.

    OFF-Topic:
    Dazu ein kleiner Witz am Rande:

    Ein Astrologe, ein Physiker und ein Mathematiker fahren mit dem Zug von England nach Schottland.
    Das erste Schaf das der Astrologe in Schottland sieht ist schwarz und er ruft ganz erstaunt aus:
    "Seht mal, in Schottland sind alle Schafe schwarz."
    Darauf der Phsiker: "Eigentlich wissen wir jetzt nur, das es in Schottland schwarze Schafe gibt."
    Meint der Mathematiker:
    "Also, das ist so nicht ganz korrekt.
    Wir wissen jetzt lediglich,
    daß es in Schottland eine Weide gibt,
    auf der ein Schaf steht,
    das zumindest auf einer Seite schwarz ist."

    😁



  • @axam sagte in Informationen finden zu: BasicLowLevel C++ / Interne Funktionsweise:

    Und wenn eine Funktion auch von ihrer Funktionsweise abhängig ist, sollte ich besser mal meinen gewünschten return-Wert hinterfragen und die Funktion umschreiben/aufsplitten.

    Ich verstehe nicht ganz was du meinst. Kannst du ein Beispiel liefern für eine Funktion die "abhängig von ihrer Funktionsweise" (meinst du damit abhängig davon wie der Compiler sie übersetzt?) unterschiedliche Ergebnisse liefern/unterschiedliche Effekte haben könnte?



  • @hustbaer sagte in Informationen finden zu: BasicLowLevel C++ / Interne Funktionsweise:

    Ich verstehe nicht ganz was du meinst. Kannst du ein Beispiel liefern für eine Funktion die "abhängig von ihrer Funktionsweise" (meinst du damit abhängig davon wie der Compiler sie übersetzt?) unterschiedliche Ergebnisse liefern/unterschiedliche Effekte haben könnte?

    Dann hätte er UB ins Programm eingebaut, was man normalerweise explizit zu verhindern sucht.

    Er hat ein ziemlich großes Verständnisproblem, wenn er solche Dinge in Betracht zieht.



  • Was schnell oder langsam ist, hängt noch von soviel mehr ab als den konkreten Anweisungen. Selbst mit zig Jahren Erfahrung fällt es schwer C++ Code auch nur grob nach Performance zu ordnen. Man sollte das daher überhaupt nur angehen, wenn man mit einer Messung bewiesen hat, das die Performance nicht ausreicht.



  • @TGGC sagte in Informationen finden zu: BasicLowLevel C++ / Interne Funktionsweise:

    Was schnell oder langsam ist, hängt noch von soviel mehr ab als den konkreten Anweisungen. Selbst mit zig Jahren Erfahrung fällt es schwer C++ Code auch nur grob nach Performance zu ordnen. Man sollte das daher überhaupt nur angehen, wenn man mit einer Messung bewiesen hat, das die Performance nicht ausreicht.

    Was man meines Erachtens relativ einfach sagen kann, dass man Algorithmen auf modernen CPUs auf Cache Hits optimieren muss. Nichts ist schlimmer, als wenn die CPU auf den Arbeitsspeicher warten muss. Alle Mikrooptimierungen hingegen sollte man nur angehen, wenn man mit dem Profiler konkrete Werte hat und auch vorher schon weiß, dass sich das lohnt.


Log in to reply