


Stack-Ausrichtung in Tailcall-Situationen
Es stellt sich die Frage, warum das RAX-Register im generierten Assembler-Code zuerst auf den Stack geschoben wird der C-Code, der mit einem std::function-Objekt interagiert.
Die Notwendigkeit von Stack Ausrichtung
Das 64-Bit-ABI schreibt vor, dass der Stapel vor jeder Aufrufanweisung auf 16 Bytes ausgerichtet wird. Wenn ein Aufruf erfolgt, wird eine 8-Byte-Rücksprungadresse auf den Stapel verschoben, wodurch diese Ausrichtung unterbrochen wird. Um dies zu beheben, muss der Compiler Maßnahmen ergreifen, um den Stapel vor dem nachfolgenden Aufruf auf ein Vielfaches von 16 neu auszurichten.
Einen verfügbaren Wert für die Ausrichtung übertragen
Anstatt auszuführen „sub rsp, 8“, das Drücken eines „egal“-Werts wie RAX, erweist sich auf CPUs, die mit einem Stack ausgestattet sind, als effizienter Motor. Dies liegt daran, dass eine einfache Push-Anweisung häufig weniger Prozessoraufwand erfordert als eine Sub-RSP-8-Anweisung.
Vergleich mit einem Tailcall ohne std::function Wrapper
Wenn dort Ist kein std::function-Wrapper vorhanden, wie im Beispiel „void g(void (*a)())“, ist der Tailcall unkompliziert: eine einfache Sprunganweisung (jmp) zum Ziel Funktion. Für die Stapelausrichtung sind keine zusätzlichen Schritte erforderlich, da der Tailcall natürlich die richtige Stapelausrichtung beibehält.
Das obige ist der detaillierte Inhalt vonWarum wird das RAX-Register bei Tail Calls mit std::function auf den Stack geschoben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

In diesem Artikel werden die Funktionstypen zur Rückgabe von Funktionen (int, float, char usw.), abgeleitet (Arrays, Zeiger, Strukturen) und Hohlraumtypen enthält. Der Compiler bestimmt den Rückgabetyp über die Funktionserklärung und die Rückgabeerklärung unter der Durchsetzung

GULC ist eine Hochleistungs-C-Bibliothek, die minimale Overheads, aggressive Einbeziehung und Compiler-Optimierung priorisiert. Ideal für leistungskritische Anwendungen wie Hochfrequenzhandel und eingebettete Systeme, sein Design betont die Einfachheit, Modul

Dieser Artikel erläutert die C -Funktionserklärung im Vergleich zu Definition, Argumentübergabe (nach Wert und Zeiger), Rückgabetwerten und gemeinsamen Fallstricken wie Speicherlecks und Typenfehlanpassungen. Es betont die Bedeutung von Erklärungen für Modularität und Provi

In diesem Artikel wird die C -Funktion für die String -Fallkonvertierung beschrieben. Es erklärt mit toupper () und tolower () aus ctype.h, iteriert durch Saiten und Handhabung von Null -Terminatoren. Häufige Fallstricke wie das Vergessen von ctype.h und das Modifizieren von String -Literalen sind

Dieser Artikel untersucht die Speicher des C -Funktionsrückgabewerts. Kleine Renditewerte werden in der Regel in Registern für Geschwindigkeit gespeichert. Größere Werte können Zeiger zum Speicher verwenden (Stapel oder Heap), die die Lebensdauer beeinflussen und die manuelle Speicherverwaltung erfordern. Direkt ACC

Dieser Artikel analysiert die vielfältigen Verwendungen des Adjektivs "Unterscheidet", die seine grammatikalischen Funktionen, gemeinsame Phrasen (z. B. "unterscheidet sich von" "deutlich anders") und nuancierte Anwendung in formalen vs. informellen Anwendung

In diesem Artikel werden die C -Standard -Vorlagenbibliothek (STL) erläutert, die sich auf seine Kernkomponenten konzentriert: Container, Iteratoren, Algorithmen und Funktoren. Es wird beschrieben, wie diese interagieren, um die generische Programmierung, die Verbesserung der Codeeffizienz und die Lesbarkeit t zu ermöglichen

Dieser Artikel beschreibt die effiziente Verwendung von STL -Algorithmus in c. Es betont die Auswahl der Datenstruktur (Vektoren vs. Listen), Algorithmus -Komplexitätsanalyse (z. B. std :: sortieren vs. std :: partial_sort), Iteratoranwendungen und parallele Ausführung. Häufige Fallstricke wie


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung
