以太坊系列之十二: solidity变量存储

简介: solidity中变量的存储变量存储主要分为两个区域,一个是storage(对应指定是SLOAD,SSTORE),一个是Memory(MLOAD,MSTORE), 这和普通编程语言的内存模型是不一样的.

solidity中变量的存储

变量存储主要分为两个区域,一个是storage(对应指定是SLOAD,SSTORE),一个是Memory(MLOAD,MSTORE), 这和普通编程语言的内存模型是不一样的.
storage就像硬盘是长期存储,memory调用返回就没了.

默认情况:

  • 函数变量以及返回值都是存储在memory
  • 其他变量(函数的局部变量)都是storage

强制情况(也就是不能通过在声明的时候指定memory或storage):
* 外部函数调用时的参数真是calldata(和memory差不多)
* 合约的成员变量(state variable)

Forced data location:

  • parameters (not return) of external functions: calldata
  • state variables: storage
    Default data location:
  • parameters (also return) of functions: memory
  • all other local variables: storage

存储在memory和storage中的变量在操作上也是有区别的,比如memory中的数组不能改变大小,而storage中的就可以.比如:

uint[] memory a = new uint[](7);
a.length=8 //这是不允许的
uint[] storage sa;
sa.push(32); //只有storage可以push,因为他的大小不固定,而memory中的一旦声明就固定下来了.
目录
相关文章
|
Go 数据安全/隐私保护
Solidity笔记-合约间的互相调用
Solidity笔记-合约间的互相调用
203 0
|
编译器 区块链
|
区块链 编译器
以太坊Truffle框架如何修改solidity版本?
当使用truffle开发以太坊solidity合约时,经常碰到的一个问题,就是你的solidity合约代码所要求的编译器版本,与truffle预装的solitiy编译器版本不匹配。本文将介绍如何更改truffle中的solidity版本。
1824 0
|
区块链
solidity智能合约如何判断地址为0或空
solidity智能合约如何判断地址为0或空
384 0
|
区块链
solidity 智能合约之间的调用
solidity 智能合约之间的调用
574 0
|
安全 区块链
智能合约编写注意事项
智能合约编写注意事项
167 0
|
存储 安全 程序员
Solidity 文档--第一章:智能合约入门
Solidity 文档--第一章:智能合约入门
328 0
|
数据安全/隐私保护
Solidity 文档--第三章:Solidity 编程实例
Solidity 文档--第三章:Solidity 编程实例
86 0
|
Ubuntu JavaScript 前端开发
Solidity 文档--第二章:安装 Solidity
Solidity 文档--第二章:安装 Solidity
409 0