存储类型 | 数据位置 | 生命周期 | Gas 成本 | 读写速度 | 典型使用场景 | 示例关键字 |
---|---|---|---|---|---|---|
🧱 Storage | 区块链永久存储(合约状态区) | 合约存在期间 | 💰 极高 | 🐢 慢 | 状态变量、合约数据 | uint public x; |
💡 Memory | 临时内存(函数执行期间) | 函数调用时创建,结束即销毁 | 💸 中等 | ⚡ 快 | 临时计算、函数参数 | string memory name; |
🧮 Stack | EVM 栈寄存器(本地 CPU 类似) | 指令执行期间 | ✅ 极低 | 🚀 极快 | 简单算术、局部变量 | uint sum = a + b; |
📦 Calldata | 外部函数参数的只读区 | 函数调用期间 | 💸 中等偏低 | ⚡ 快 | 接收外部输入(不可修改) | function f(uint[] calldata data) |
storage
数据保存在区块链上,写入会消耗大量 gas。memory
只在函数执行期间存在。stack
是 EVM 的操作栈,存取速度最快但容量有限(1024深度)。操作类型 | 大致 Gas 消耗 | 说明 |
---|---|---|
SSTORE 写入 Storage |
~20,000 gas | 写入链上永久状态,非常昂贵 |
SLOAD 读取 Storage |
~2,100 gas | 从链上读取状态 |
MSTORE 写入 Memory |
~3 gas/字节 | 临时写入,成本中等 |
MLOAD 读取 Memory |
~3 gas/字节 | 读取内存数据 |
Stack 操作 (PUSH , POP ) |
<1 gas | 几乎无成本 |