Evm

儲存指針在 EVM 層是如何實現的?

  • May 9, 2018

我試圖了解儲存指針是如何工作的。從 ethereumjs-vm 實現來看,實際值似乎是從 SLOAD 返回的。編譯器是否處理“指針”功能?(即,如果已修改,則呼叫 SSTORE)。

是的,編譯器處理指針功能。當您想要寫入或讀取它指向的儲存位置時,您不需要顯式取消引用儲存指針。

我認為它們被稱為指針這一事實非常令人困惑。它讓我想起了 C 指針,但 Solidity 中的儲存指針更像 C++ 或 PHP 引用,而不是 C 指針。

可靠性指標:

uint256[] public a;
constructor() public
{
   a.push(1);
   test(a);
}
function test(uint256[] storage b) private
{
   b[0] = 7;
   // a[0] is now 7
}

C++ 參考(類似於 Solidity 指針):

int a = 1;
int& b = a;
b = 7;
// a is now 7

PHP 參考資料(也類似於 Solidity 指針):

$a = 1;
$b = &$a;
$b = 7;
// a is now 7

C 指針(與Solidity 指針非常不同):

int a = 1;
int* b = &a;
b = 7;
// a is now still 1

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