Memory

什麼時候使用記憶體,什麼時候不使用?

  • January 10, 2022

我看了這個影片,他用memory了很多類似的function verify(address _signer, string memory _message, bytes memory _sig。為什麼這樣?該功能可以在不使用的情況下工作memory嗎?

而平時function transferFrom(address owner, address buyer, uint256 numTokens)沒有記憶。

我們什麼時候使用記憶體,什麼時候不需要使用它們?

正如評論中提到的,它取決於變數的類型。

許多類型正好是 1 個字(32 個字節)寬。這些被稱為值類型。由於它們具有恆定的寬度,因此它們通常存在於堆棧中。

一些其他類型(例如array基於類型的bytesor string)可能會佔用更多儲存空間,因此不會保留在堆棧中。堆棧只保留對數據的引用。它們被稱為引用類型。要知道引用指向的位置,有必要定義儲存位置,可能calldatamemorystorage。根據位置,編譯器將以不同的方式訪問數據。這在數據位置部分中有詳細描述。

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