鲲志博主出品 · Web2 开发者的 Web3 修炼之路 ➡️【好看的灵魂千篇一律,有趣的鲲志一百六七!】- 欢迎认识我~~ 作者:鲲志说 (公众号、B站同名,视频号:鲲志说996) 科技博主:极星会 星辉大使 全栈研发:java、go、python、ts,前电商、现web3 主理人:COC杭州开发者社区主理人 、周周黑客松杭州主理人、 博客专家:阿里云专家博主;CSDN博客专家、后端领域新星创作者、内容合伙人 AI爱好者:AI电影共创社杭州核心成员、杭州AI工坊共创人、阿里蚂蚁校友会技术AI分会副秘书长 目录 【摘要】 【引言】 一、四类存储空间概览:功能、生命周期与成本对比 📊 EVM 四类存储空间结构图 二、Solidity 变量如何映射到 stack / memory / storage / calldata? 1️⃣ 状态变量(State Variables)→ storage 2️⃣ 函数局部变量(Local Variables)→ stack 或 memory 3️⃣ 外部函数参数 → calldata(默认)或 memory(仅限内部/公共函数) 三、函数参数与返回值的内存分布图解 1️⃣ external 函数的参数走 calldata,最省 gas(只读) 2️⃣ public/internal 函数参数走 memory(可读写) 3️⃣ 函数返回值多数为 memory 四、开发实用建议:省 Gas 优化与安全边界 ✅ 使用 calldata 参数替代 memory:可省最大 Gas ⚠️ 避免无意使用 storage 引用,防止状态被修改 ✅ 利用 struct 紧密打包节省 storage slot 五、storage 指针陷阱与 struct 引用误区:如何一个 storage 写错导致资产丢失 ⚠️ storage vs memory struct 的赋值陷阱