Evm
Solidity 0.5.0 動態大小的參數如何聲明為儲存?
據我了解,EVM 中的“記憶體”是一個字節數組,不能動態調整大小,而“儲存”可以調整大小。將參數聲明為儲存時會發生什麼。這個儲存寫入到哪裡?
我的假設是否正確,即當“記憶體”數組作為參數傳入時,它具有固定大小?
據我了解,EVM 中的“記憶體”是一個字節數組,不能動態調整大小,而“儲存”可以調整大小。將參數聲明為儲存時會發生什麼。這個儲存寫入到哪裡?
當標記的參數
storage
傳遞給函式時,傳遞的是對儲存中已存在的某些數據的*引用。*考慮以下程式碼:pragma solidity 0.5.2; contract Test { uint256[] public foo; function test() external { uint256 oldLength = foo.length; append(foo); assert(foo.length == oldLength + 1 && foo[oldLength] == 42); } function append(uint256[] storage arr) internal { arr.push(42); } }
在這裡,
foo
數組一直保留在儲存中。append
可以修改傳入的數組。我的假設是否正確,即當“記憶體”數組作為參數傳入時,它具有固定大小?
作為參數傳入的記憶體數組可以是固定大小或動態大小,但我認為你得到的是它們無法調整大小,你是對的。記憶體中的數組通常不能調整大小,這包括作為
memory
參數傳遞的數組。這僅僅是由於記憶體佈局和儲存佈局之間的差異。有關更多詳細資訊,請參閱有關儲存佈局和記憶體佈局的 Solidity 文件。