Поддерживает ли EVM сборку мусора (восстановление неиспользуемой памяти)?

EVM может восстановить хранилище, используя ключевое слово «удалить» в Solidity.

Однако память расширяется, когда под ключевое слово «новое» выделяется больше, верно? Локальные переменные также хранятся в памяти?

Когда память сжимается, чтобы память не расширялась?

Ответы (1)

Нет. Использование памяти во время выполнения одного EVM/исполнения контракта только увеличивается.

То есть вы получаете платный газ за увеличение объема используемой памяти, но не получаете возмещение за уменьшение объема. Как вы говорите, это отличается от хранения.

С точки зрения « Желтой книги » объем памяти в словах составляет mu_i. Всякий раз, когда это пересчитывается, это всегда с точки зрения max(mu_i, current_memory_access)- так что это монотонно; он никогда не падает.

Что еще более интересно, простое чтение памяти (но не запись в нее) может увеличить объем используемой памяти mu_i. Таким образом, с вас будет взиматься плата за расширение памяти, если вы просто читаете за пределы текущей верхней части памяти. См. определение MLOADв Желтой книге.

Solidity в основном хранит локальные переменные в памяти, но иногда может использовать стек для промежуточных значений.

Спасибо за отличный ответ. Есть ли способ определить, используется ли память или стек для хранения локальной переменной в Solidity, кроме просмотра байтового кода? Применяется ли deleteтакже к переменным памяти, т. е. может ли он использоваться для установки памяти в «ноль»?
В документации Solidity есть некоторая информация о стеке и памяти . deleteработает с переменными памяти; он просто устанавливает его в ноль.
Еще раз спасибо. Не могли бы вы ответить на мой другой вопрос, если у вас есть время? эфириум.stackexchange.com/questions/32096/…