Ich kann leicht verstehen, wie .bss und der Code physikalische Darstellungen im Prozessor haben, der eine Speicherbank für die Anweisungen hat, die ein Programmzähler hochzählen kann, und das bss (Blockstart-Symbol) sind nur globale Daten. Aber dann gibt es den Stapel für lokale Variablen und den Heap für den dynamischen Speicher. Wie werden diese Dinge physisch auf die Strecke gebracht?
quelle
Logischerweise sind der Stapel und der Heap normalerweise nur Speicher; Auf Implementierungsebene werden sie hoffentlich hauptsächlich aus dem Cache bereitgestellt. In den meisten Systemen gelangen sie dynamisch über Caching-Algorithmen dorthin, aber es gab Systeme, die die explizite Speicherung im Cache oder in einem anderen Speicher unterstützen, der schneller als üblich ist, und wahrscheinlich auch solche, die das Hinterlassen von Hinweisen unterstützen, dass bestimmte Daten für die Platzierung dort eine bevorzugte Priorität haben sollten Platz erlaubt.
Das Design von Software- und Compiler-Codegeneratoren auf niedriger Ebene berücksichtigt hoffentlich die Organisation des Datenzugriffs, was wahrscheinlich zu einer guten Cache-Auslastung im Vergleich zu ständigen Cache-Fehlern führt.
Einige Prozessoren verfügen über ein Rücksprungadressenregister, das als eine Art expliziter Stapelspeicher mit einer Tiefe fungiert (es gibt wahrscheinlich auch solche mit mehreren tiefen Hardwarestapeln, obwohl Beispiele nicht in den Sinn kommen).
quelle