Evm

堆棧太深,記憶體變數局部變數之間的差異

  • November 5, 2018

出現“堆棧太深”錯誤,並在堆棧交換中看到我可以嘗試使用記憶體變數而不是局部變數,並將 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

引用自:https://ethereum.stackexchange.com/questions/61796