以太坊系列之十二: 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中的一旦声明就固定下来了.
目录
相关文章
|
C++ 索引
【C++STL基础入门】深入理解string类重新赋值(assign)与删除(erase)
【C++STL基础入门】深入理解string类重新赋值(assign)与删除(erase)
1235 1
|
区块链 数据安全/隐私保护 缓存
带你读《深入理解以太坊》之三:技术架构
这是一本从原理和实践两个层面系统、深入讲解以太坊技术的专著,从设计理念、技术架构、共识算法、智能合约、以太坊虚拟机、开发工具、DApp开发、企业以太坊解决方案、跨链技术等近10个方面进行了详细讲解,既适合初学者系统学习以太坊的原理和应用开发,又适合有一定基础的开发者深入掌握以太坊的底层运行机制。
|
11月前
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
Linux
如何创建和配置linux虚拟机(一)
如何创建和配置linux虚拟机
367 0
|
机器学习/深度学习 人工智能 自然语言处理
从提示工程到代理工程:构建高效AI代理的策略框架概述
该文探讨了AI代理的发展,特别是ChatGPT等模型如何展示了AI系统的潜力。文章提出从提示工程转向代理工程,定义了代理能力需求,并提出一个框架来设计和实施AI代理。代理工程涉及明确代理的任务、所需行动、能力及熟练度,通过现有技术满足这些需求。文章强调了广泛和特定知识的熟练度、精确信息获取以及代理的结构设计和协调。随着技术进步,该框架为AI代理的未来发展提供了基础。
829 0
|
监控 Dubbo 应用服务中间件
DUBBO--基础篇(二)--监控中心
DUBBO--基础篇(二)--监控中心
264 0
|
算法 Go
Golang实现Raft一致性算法
Golang实现Raft一致性算法
284 0
|
存储 Cloud Native 关系型数据库
【云原生 · Docker】入门篇:安装、镜像加速
【云原生 · Docker】入门篇:安装、镜像加速
1046 0
|
编译器 C语言 C++
C/C++中int128的那点事
C/C++中int128的那点事
958 0
C/C++中int128的那点事