【Solidity Yul Assembly】2.1 | Memory Operations

  • 0xE
  • 发布于 2024-08-21 16:05
  • 阅读 803

从本章开始,我们来研究内存布局。

在你做以下操作时将使用到内存:

  1. 外部调用合约的时候,返回值将放在内存中。
  2. 设置外部调用函数的参数。
  3. revert 时返回错误信息。
  4. 日志信息。
  5. 创建其他智能合约。
  6. 使用 keccak256 函数。

概述

  • 内存相当于其他语言的“堆”
    • 但是没有垃圾回收机制与 free 命令。
    • 内存以 32 字节序列的形式布局。以 32 字节的增量来寻址。
    • [0x00 - 0x20) [0x20 - 0x40) [0x40 - 0x60) [0x60 - 0x80) [0x80 - 0x100)...
  • 只有 4 条指令与内存有关
    • mload, mstore, mstore8, msize
  • 用纯 yul 写的代码,内存比较容易使用。但在 solidity/yul 的混合代码中, solidity 使用了特殊的方式来使用内存。
  • 重要的是,每次内存访问都会消耗 gas,且访问距离越远,消耗的 gas 越多。
    • mload(0xffffffffffffffff) 指令将会超出 3000万 gas 使用的限制。
    • 因此,像在存储中通过哈希值定位位置的方法...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
0xE
0xE
0x59f6...a17e
17年进入币圈,Web3 开发者。刨根问底探链上真相,品味坎坷悟 Web3 人生。有工作机会可加v:__0xE__