solidity 数据存储位置
solidity文档在0.5.0之后发生大变动,复杂的数据类型必须给出明确的数据存储位置:memory
、storage
和calldate
三个存储位置的区别
storage
存储
- 永久存储,写在区块链上,需要花费gas,使用的存储空间越大花费的gas越多。
memory
内存
- 仅在函数执行期间存储,函数执行结束后删除数据,花费gas少于storage。
calldate
调用数据
- 外部函数的参数需要calldata,但也可用于其他变量。是一个不可修改的,非持久性的区域,用于存储函数参数。
默认存储位置
- 状态变量默认storage
- 内部函数参数默认memory
- 外部函数参数默认calldata
报错
string public s;
function setStrings(string _s) public {
s = _s;
}
- string 类型在作为参数必须加memory,因为string默认是storage