一、Solidity 的几种存储位置

存储类型 数据位置 生命周期 Gas 成本 读写速度 典型使用场景 示例关键字
🧱 Storage 区块链永久存储(合约状态区) 合约存在期间 💰 极高 🐢 慢 状态变量、合约数据 uint public x;
💡 Memory 临时内存(函数执行期间) 函数调用时创建,结束即销毁 💸 中等 ⚡ 快 临时计算、函数参数 string memory name;
🧮 Stack EVM 栈寄存器(本地 CPU 类似) 指令执行期间 极低 🚀 极快 简单算术、局部变量 uint sum = a + b;
📦 Calldata 外部函数参数的只读区 函数调用期间 💸 中等偏低 ⚡ 快 接收外部输入(不可修改) function f(uint[] calldata data)

📦 核心区别


⚙️ Gas 成本估算(参考)

操作类型 大致 Gas 消耗 说明
SSTORE 写入 Storage ~20,000 gas 写入链上永久状态,非常昂贵
SLOAD 读取 Storage ~2,100 gas 从链上读取状态
MSTORE 写入 Memory ~3 gas/字节 临时写入,成本中等
MLOAD 读取 Memory ~3 gas/字节 读取内存数据
Stack 操作 (PUSH, POP) <1 gas 几乎无成本

🧠 小结


二 、代码演示:三种存储方式的差异