小编A. *_*lov的帖子

为什么文字值在放入堆之前从只读内存复制到堆栈?

当我尝试使用Rust时,我注意到如果从文字中创建一个盒装数组Box::new,则会从只读内存中额外复制到堆栈.为什么Rust编译器不能直接从只读内存复制到堆上分配的空间?

Rust代码的片段:

fn main() {
    let v: Box<[u32]> = Box::new([1u32,2,3456,4,5,6]);
    println!("vector {}", v.len());
}
Run Code Online (Sandbox Code Playgroud)

适当的汇编片段:

00000000000049d4         mov        rax, qword [ds:0x39ad0]
00000000000049db         mov        qword [ss:rsp+arg_F8], rax
00000000000049e3         movaps     xmm0, xmmword [ds:const1050]
00000000000049ea         movaps     xmmword [ss:rsp+arg_E8], xmm0
00000000000049f2         mov        ecx, 0x18
00000000000049f7         mov        edi, ecx                                    ; argument #1 for method _ZN4heap15exchange_malloc20h356508549306a536JeaE
00000000000049f9         mov        ecx, 0x4
00000000000049fe         mov        esi, ecx                                    ; argument #2 for method _ZN4heap15exchange_malloc20h356508549306a536JeaE
0000000000004a00         call       _ZN4heap15exchange_malloc20h356508549306a536JeaE ; heap::exchange_malloc::h356508549306a536Jea
0000000000004a05         mov        rsi, qword [ss:rsp+arg_F8]
0000000000004a0d         mov        qword [ds:rax+0x10], rsi …
Run Code Online (Sandbox Code Playgroud)

performance code-generation rust

3
推荐指数
1
解决办法
74
查看次数

标签 统计

code-generation ×1

performance ×1

rust ×1