Evm
儲存指針在 EVM 層是如何實現的?
我試圖了解儲存指針是如何工作的。從 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