Evm
堆棧太深,記憶體變數局部變數之間的差異
出現“堆棧太深”錯誤,並在堆棧交換中看到我可以嘗試使用記憶體變數而不是局部變數,並將 8 uint 移動到 uint
$$ 8 $$,沒有錯誤了。為什麼這在使用單個單元時不起作用? 程式碼範例
uint a; uint b; uint c; uint d; uint e; uint f; uint g; uint h;
“使用太多變數,堆棧太深”
與
uint[8] memory abcdefgh;
沒問題
在第一種情況下,您的各個原語是放置在程序堆棧上的局部變數。最大堆棧深度是有限的:這些變數可能會使您的程序達到該限制,從而產生堆棧溢出錯誤。
在第二種情況下,預設情況下,Solidity 將生成程式碼以將數組儲存在storage中,它實際上具有無限的容量。因此,不會有任何錯誤。
storage
您可以使用該屬性使其明確。您還可以使用記憶體說明符告訴編譯器將數組放入記憶體中:uint[8] memory abcdefgh
。