Wie kann ich den Assemblercode sehen, der von einem gcc-Compiler (beliebiger Geschmack) für ein C/C++-Programm generiert wird?

Lesezeit: 3 Minuten

Benutzeravatar von vehomzzz
vehomzzz

Ich versuche, viele Multiplikationen und Zeigerarithmetik zu optimieren, und würde gerne sehen, was der Compiler darunter tut, wenn ich Optimierungsflags einsetze.

–Bearbeiten–

Wie kann man es auf eine bestimmte Funktion oder einen Codeblock beschränken?

–Bearbeiten_2–

Wie lässt man gcc einen weniger ausführlichen Assembler-Code generieren?

  • Eine weniger ausführliche Versammlung? Was genau meinst du damit?

    anon

    30. August 2009 um 21:29 Uhr

  • Sie möchten also, dass gcc generiert wird falsch Montagecode, der nur Ihren Sinn für Schönheit befriedigt? Nein Sir.

    – P Schweb

    30. August 2009 um 21:39 Uhr

  • LOL Ich möchte ein korrektes generieren, aber es für mich prägnant darstellen. Ist das zuviel verlangt? Keine große Sache, aber zusätzliche Informationen werden mich nicht umbringen. Ich habe mich nur gefragt, ob es überhaupt möglich ist oder ob es Tools gibt … Pavel, ich glaube, Sie verstehen meine Frage nicht ganz

    – vehomzzz

    30. August 2009 um 22:17 Uhr

  • Es ist ein bisschen viel verlangt, ja. Die generierte Assembly ist genau der Code, den die CPU ausführen wird. Wenn Sie nur den für Sie relevanten Code anzeigen möchten, schreiben Sie eine vereinfachte Funktion, die diese Operation ausführt, kompilieren Sie sie und zeigen Sie dann die Assembly an.

    – Grauschimmer

    30. August 2009 um 22:46 Uhr

  • Und natürlich existiert die ganze Vorstellung von “dem Code für eine bestimmte Funktion” nicht mehr, sobald ein Optimierer Assembler-Anweisungen eingefügt, neu geordnet, zusammengeführt und/oder eliminiert hat.

    – MSalter

    31. August 2009 um 8:09 Uhr

Benutzeravatar von P Shved
P Schwed

Hinzufügen -S Wechseln Sie zu Ihrer Befehlszeile.

Bearbeiten: Vergessen Sie nicht, dass die Baugruppe in den Dateien platziert wird, die Sie unter angegeben haben -o Schalter.

Wie kann man es auf eine bestimmte Funktion oder einen Codeblock beschränken?

Setzen Sie diese Funktion in eine separate Quelldatei (und verwenden Sie einen anderen Befehlszeilenparameter für diese eine Quelldatei).

  • Das habe ich getan. Ich bin gespannt, ob es nur mit Optionen möglich ist.

    – vehomzzz

    30. August 2009 um 21:24 Uhr

  • Dies spiegelt möglicherweise nicht wider, wie es wirklich optimiert ist, wenn es in Aufrufer eingebunden werden kann. (Besonders bei Link-Time-Optimierung). Wenn auch nur ein Parameter eine Kompilierzeitkonstante ist, kann dies einen großen Unterschied machen, oder wenn die Ausrichtung oder Größe eines Arrays bekannt ist, kann dies die Autovektorisierung stark verändern. Aber ja, das ist gut wenn du verstehst was du tust.

    – Peter Cordes

    27. Februar 2018 um 20:04 Uhr

Sie könnten dieses Programm auch in einem Debugger wie z gdb und verwenden Sie eine Disassembly-Ansicht. Im gdb Sie könnten den Befehl verwenden disass/m um die Assembly gemischt mit dem C-Code an der aktuellen Position anzuzeigen.

  • Können Sie ein Minimalbeispiel hinzufügen? disass/m druckt nur No frame selected.

    – Clemens

    11. April 2016 um 19:28 Uhr

Sie könnten Ihr Programm an einem Haltepunkt im Visual Studio-Debugger anhalten und “Assembly anzeigen” und sogar eine Anweisung nach der anderen durchlaufen.

1400500cookie-checkWie kann ich den Assemblercode sehen, der von einem gcc-Compiler (beliebiger Geschmack) für ein C/C++-Programm generiert wird?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy