import{_ as i,c as a,a as n,o as l}from"./app-BwvsBlHw.js";const h={};function e(k,s){return l(),a("div",null,[...s[0]||(s[0]=[n(`

关于 memory 和 storage 存储类型

生命周期与成本

默认与必须声明

拷贝与引用语义

pragma solidity ^0.8.20;

contract Users {
    struct User { string name; uint age; }
    User[] public users;

    function add(string memory name, uint age) external {
        users.push(User(name, age)); // 写入 storage
    }

    function updateName(uint i, string memory newName) external {
        User storage u = users[i];   // storage 引用(指向链上状态)
        u.name = newName;            // 修改持久化生效
    }

    function tryUpdate(uint i) external {
        User memory u = users[i];    // 从 storage 复制到 memory
        u.age = 99;                  // 仅修改副本,不会影响链上状态
    }
}

在内部函数传递 storage 引用

pragma solidity ^0.8.20;

contract Users2 {
    struct User { string name; uint age; }
    User[] public users;

    function _inc(User storage u) internal { u.age += 1; }

    function birthday(uint i) external {
        _inc(users[i]); // 传递 storage 引用,持久化修改
    }
}

动态 memory 数组与限制

pragma solidity ^0.8.20;

contract Arrays {
    function make(uint n) external pure returns (uint[] memory a) {
        a = new uint[](n);
        for (uint i = 0; i < n; i++) a[i] = i;
    }
}

常见坑与实践建议

`,17)])])}const p=i(h,[["render",e]]),d=JSON.parse('{"path":"/programming/solidity/other/miscellaneous/","title":"一些没分类的小知识","lang":"zh-CN","frontmatter":{"title":"一些没分类的小知识","createTime":"2025/10/12 15:34:38","permalink":"/programming/solidity/other/miscellaneous/"},"readingTime":{"minutes":2.4,"words":721},"git":{"createdTime":1760427548000,"updatedTime":1760963123000,"contributors":[{"name":"祀梦","username":"","email":"3501646051@qq.com","commits":2,"avatar":"https://gravatar.com/avatar/6406a81eeddc359cf3d3ce018797689fc6d014ff06215c27d0210b42e8f5a8ab?d=retro"}]},"filePathRelative":"notes/programming/solidity/other/miscellaneous.md","headers":[]}');export{p as comp,d as data};