Memory
什麼時候使用記憶體,什麼時候不使用?
我看了這個影片,他用
memory
了很多類似的function verify(address _signer, string memory _message, bytes memory _sig
。為什麼這樣?該功能可以在不使用的情況下工作memory
嗎?而平時
function transferFrom(address owner, address buyer, uint256 numTokens)
沒有記憶。我們什麼時候使用記憶體,什麼時候不需要使用它們?
正如評論中提到的,它取決於變數的類型。
許多類型正好是 1 個字(32 個字節)寬。這些被稱為值類型。由於它們具有恆定的寬度,因此它們通常存在於堆棧中。
一些其他類型(例如
array
基於類型的bytes
orstring
)可能會佔用更多儲存空間,因此不會保留在堆棧中。堆棧只保留對數據的引用。它們被稱為引用類型。要知道引用指向的位置,有必要定義儲存位置,可能calldata
是memory
和storage
。根據位置,編譯器將以不同的方式訪問數據。這在數據位置部分中有詳細描述。