【问题标题】:When to use Box instead of reference?何时使用 Box 而不是参考?
【发布时间】:2016-03-20 17:31:08
【问题描述】:

我是 Rust 新手,我试图了解何时应该使用 Box 而不是常规引用。

我能找到的所有示例都显示了如何使用 Box,但没有一个说明在什么情况下您应该在常规 & 引用上使用它们。

【问题讨论】:

    标签: pointers rust


    【解决方案1】:

    除了 Shepmaster 的精彩回答:另一种思考所有权的方式

    你总是要思考:价值在哪里? ?

    例如,数据可以存在于堆栈中、可执行文件的某个特殊位置或Box 中。另一方面,引用并不是存在的地方——它只是指向一些存在 其他地方的数据。所以:

    • 如果您知道要处理的数据有一个住处:您通常只需使用引用(地址)即可访问它(访问它✈)。
    • 如果你的数据没有地方住,就把它装在盒子里给它一个家?♥

    Rust 书中的 ownershipborrowing 章节是了解这些概念的好方法。

    【讨论】:

      【解决方案2】:

      Box 表示一个类型是拥有的,并且它被分配在堆上。引用 (&) 表示您正在借用其他东西的价值。

      您甚至可以从Box 获得引用(此处不需要显式类型,仅显示为清楚起见):

      let boxed: Box<i32> = Box::new(42);
      let reference: &i32 = &boxed;
      

      主要区别归结为所有权。当你拥有一个值时,你可以对它做更多的事情,比如销毁它或控制它的可变性。

      堆与堆栈也很重要,但不那么重要。堆栈往往具有相对较小的固定大小(在我的机器上是 8MiB),因此在堆栈上声明大变量可能会导致内存耗尽。堆往往更大,概念上寻址 2^32 或 2^48 字节。

      The Rust Programming Language 有一个section on ownership 以及一个关于the stack and the heap 的部分;我鼓励你阅读这两本书。

      【讨论】:

        猜你喜欢
        • 2012-12-31
        • 1970-01-01
        • 1970-01-01
        • 2020-07-26
        • 1970-01-01
        • 2017-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多