小编Ser*_*lov的帖子

当堆栈分配值被装箱时会发生什么?

如果我们有一个已经在堆栈上分配的值,那么装箱会将它复制到堆中然后转移所有权(这就是它在.NET中的工作方式,除了两个副本都能保持活动状态)?或者编译器是否"足够"以便从一开始就直接在堆上分配它?

struct Foo {
    x: i32,
}

fn main() {
    // a is allocated on stack?
    let a = Foo { x: 1 };

    // if a is not used, it will be optimized out
    println!("{}", a.x);

    // what happens here? will the stack allocated structure
    // be moved to heap? or was it originally allocated on heap?
    let b = Box::new(a);
}
Run Code Online (Sandbox Code Playgroud)

我不是汇编程序的专家,但看起来它实际上是在堆栈上分配然后移动:http://pastebin.com/8PzsgTJ1.但我需要一个确实知道发生了什么的人的确认.

boxing rust

6
推荐指数
1
解决办法
485
查看次数

为什么要依靠命名返回值优化?

我正在阅读有关NRVO的文章并试图了解何时应该依赖它而不是何时依赖它.现在我有一个问题:为什么要依靠NRVO呢?始终可以通过引用显式传递返回参数,那么有没有理由依赖NRVO?

c++ nrvo

4
推荐指数
1
解决办法
1340
查看次数

标签 统计

boxing ×1

c++ ×1

nrvo ×1

rust ×1