2016-03-26 7 views
-1

Der Titel sagt es so ziemlich. Ich schreibe einen Algorithmus (und portiere ihn gerade jetzt in nasm), der viele (bis zu 8 GB) RAMs (als eine ernsthafte Abwägung für die CPU-Nutzung) zuweisen müsste. Bei jeder Iteration speichert es ein int auf dem Stapel (für die Ausgabe und spätere Verwendung). Dann könnte es periodisch eine Reihe von Werten freisetzen, aber nur von der Unterseite des Stapels. Könnte dies getan werden, indem einfach die Stack-Basis (rbp) dekrementiert wird?Kann man Stapelspeicher auf x86_64 freigeben, indem man von rbp subtrahiert?

Antwort

0

Ein Stapel ist ein Stapel. Sie können Werte auf der Oberseite drücken und knallen, aber nicht mehr. Sie können nichts davon auf andere Weise aufheben.

Das Ändern von RBP macht nichts, es ist nur ein Hilfsregister für den aktuellen Stack-Frame. RSP zeigt den aktuellen Anfang des Stapels und bewegt sich, wobei sich der nächste Wert im Stapel befindet oder aus dem Stapel abgerufen wird. Sie können also bei Bedarf eine Reihe von Werten von oben löschen, jedoch nicht von unten.

Wenn Sie vorübergehend Werte speichern und später freigeben müssen, wäre ein Ringpuffer oder Blöcke mit normalem Speicher dafür viel besser geeignet.

+0

Kiitos, sami. Halki, poikki ja pinoon-vastaus. –