0%

solidity | 存储

这里主要讲解。

  • storage
  • memory
  • calldata

参考资料

storage

memory

calldata

calldata与内存非常相似,因为它是存储项目的数据位置。它是一个包含函数参数的特殊数据位置,仅可用于外部函数调用参数。

Calldata 是存储函数参数的不可修改、非持久性区域,其行为主要类似于内存。

calldata 所用的 gas 会偏低。「这个我没验证过」特别是,这意味着函数的参数数量可能会受到限制。值得注意的实施细节calldata如下:

  • 只能用于函数声明参数(不能用于函数逻辑)
  • 它是不可变的(它不能被覆盖和改变)
  • 它必须用于外部函数的动态参数
  • 它是非持久的(事务完成后值不持久)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pragma solidity 0.5.11;

contract Test {

string stringTest;

function memoryTest(string memory _exampleString) public returns (string memory) {
_exampleString = "example"; // You can modify memory
string memory newString = _exampleString; // You can use memory within a function's logic
return newString; // You can return memory
}

function foo(string calldata a) external {
// this one is wrong,calldata 只能用于参数声明上
string calldata b = "abc";
// this one is also wrong
a = "abc";
}
}
请我喝杯咖啡吧~