Unterstützt die EVM Garbage Collection (Rückgewinnung von ungenutztem Speicher)?

Die EVM kann Speicher zurückfordern, indem sie das Schlüsselwort „delete“ in Solidity verwendet.

Der Speicher wird jedoch erweitert, wenn mehr durch das Schlüsselwort „new“ zugewiesen wird, richtig? Werden auch lokale Variablen im Speicher abgelegt?

Wann schrumpft der Speicher, sodass sich der Speicher nicht weiter ausdehnt?

Antworten (1)

Nein. Der Speicherverbrauch während einer einzelnen EVM-Ausführung/Vertragsausführung steigt immer nur an.

Entsprechend wird Ihnen Benzin berechnet, wenn Sie die Menge des verwendeten Speichers erhöhen, aber Sie erhalten keine Rückerstattung, wenn Sie die Menge verringern. Wie Sie sagen, unterscheidet sich dies von der Speicherung.

In Bezug auf das Gelbe Papier ist die Speichergröße in Worten mu_i. Immer wenn dies neu berechnet wird, ist es immer in Bezug auf max(mu_i, current_memory_access)- es ist also monoton; es geht nie unter.

Noch interessanter ist, dass das Lesen des Speichers (nicht das Schreiben darauf) die Menge des verwendeten Speichers erhöhen kann, mu_i. Sie werden also für die Erweiterung des Speichers in Rechnung gestellt, wenn Sie nur über die aktuelle Speicherobergrenze hinaus lesen. Siehe die Definition von MLOADim Yellow Paper.

Solidity speichert hauptsächlich lokale Variablen im Speicher, verwendet aber manchmal den Stack für Zwischenwerte.

Danke für eine ausgezeichnete Antwort. Gibt es eine Möglichkeit abzuleiten, ob der Speicher oder der Stapel zum Speichern lokaler Variablen in Solidity verwendet wird, außer sich den Bytecode anzusehen? Gilt deletedas auch für Speichervariablen, dh kann man damit Speicher auf "Null" setzen?
In der Solidity -Dokumentation finden Sie einige Informationen zu Stack vs. Memory Storage . deletefunktioniert mit Speichervariablen; es setzt es einfach auf Null.
Danke noch einmal. Könnten Sie meine andere Frage beantworten, wenn Sie Zeit haben? ethereum.stackexchange.com/questions/32096/…