¿Admite EVM la recolección de elementos no utilizados (recuperación de memoria no utilizada)?

El EVM puede reclamar almacenamiento utilizando la palabra clave 'eliminar' en Solidity.

Sin embargo, la memoria se expande cuando la palabra clave 'nuevo' asigna más, ¿verdad? ¿Las variables locales también se almacenan en la memoria?

¿Cuándo se encoge la memoria, de modo que la memoria no sigue expandiéndose?

Respuestas (1)

No. El uso de la memoria durante una sola ejecución de EVM/ejecución de contrato solo aumenta.

De manera equivalente, se le cobra gasolina por aumentar la cantidad de memoria en uso, pero no obtiene un reembolso por disminuir la cantidad. Como dices, esto es diferente del almacenamiento.

En términos del Libro Amarillo , el tamaño de la memoria en palabras es mu_i. Cada vez que esto se vuelve a calcular, siempre es en términos de max(mu_i, current_memory_access), por lo que es monótono; nunca baja.

Aún más interesante, solo leer la memoria (no escribir en ella) puede aumentar la cantidad de memoria en uso mu_i. Por lo tanto, se le cobrará por expandir la memoria si solo lee más allá de la parte superior actual de la memoria. Ver la definición de MLOADen el Libro Amarillo.

Solidity almacenará principalmente variables locales en la memoria, pero a veces puede usar la pila para valores intermedios.

Gracias por una excelente respuesta. ¿Hay alguna forma de deducir si la memoria o la pila se utilizan para almacenar variables locales en Solidity, además de mirar el código de bytes? ¿ deleteTambién se aplica a las variables de memoria, es decir, se puede usar para establecer la memoria en "cero"?
Hay algo de información sobre la pila frente al almacenamiento en memoria en los documentos de Solidity . deletefunciona en variables de memoria; simplemente lo pone a cero.
Gracias de nuevo. ¿Podrías responder a mi otra pregunta si tienes tiempo? ethereum.stackexchange.com/questions/32096/…