Solidity中的memory 和 storage

若是你但愿立刻开始学习以太坊DApp开发,能够访问汇智网提供的出色的在线互动教程:数组

若是在声明合约变量时没有使用memory关键字,Solidity会尝试在storage中存储这个变量。函数

storage是什么

根据Solidity首席工程师Chriseth的说法:“你能够把storage想像成一个大数组,它有本身的结构,这个结构是由你的合约中的状态变量所决定的,所以在运行时不能改变”学习

这就是说,storage的结构是在合约部署建立时,根据你的合约中状态变量的声明,就固定下来了,而且不能在未来的合约方法调用中改变这个结构。可是,storage中的内容是能够经过交易来改变的。这些交易调用所以将修改合约的状态,这也是为何合约中的变量被称为状态变量的缘由。所以在合约层面声明的一个uint8类型的storage变量, 它的值能够修改成任何0-255之间的有效uint8值,可是该变量在storage结构中的位置始终不会变化。ui

函数中的变量

若是你在合约函数中声明变量时没有使用memory关键字,那么solidity将会尝试使用storage结构,目前来说,这样作能够经过编译,可是可能致使不可预期的结果。memory关键字告诉solidity应当在该函数运行时为变量建立一块空间,使其大小和结构知足函数运行的须要。3d

在合约层面你不能为变量应用memory关键字。教程

相关文章
相关标签/搜索