Evm
為什麼 EVM 堆棧限制為 1024?
在這裡您可以看到,如果 EVM 堆棧大於
1024
,則會導致錯誤:
- 為什麼堆棧大小有這個硬限制?
- 這不能參數化的理由是什麼?
- 是不是
1024
特別合適?如果是這樣,為什麼會這樣?
- 因為如果它非常大,那麼執行合約的成本會更高(即需要更多記憶體)。我認為 1024 是一個非常保守的值,盡可能安全
- 我認為理由是,如果您需要那麼多堆棧空間,那麼您應該將其中的一部分解除安裝到記憶體中(這實際上是無限的,儘管您必須為使用它支付 gas)。除此之外,具有固定大小使 EVM 的整體模型更加簡單和易於實現
- 就個人而言,我認為它可能會更小,因為 EVM 的設計方式往往會使更大的堆棧大小變得無用。EVM 只能訪問堆棧中距最頂部插槽最多 16 個插槽的項目。因此,即使您有 4096 個堆棧,您也可以在其中儲存所有內容,但只能直接訪問儲存在從頂部向下 16 個插槽的數據。但我認為這是 EVM 的設計缺陷