at5*_*321 6 compilation llvm rust
假设我们有一个函数将相对较大的仅堆栈数据传递给另一个函数,如下所示:
fn a() {
let arr_a: [i32; 1024] = [1, 2, 3, ...];
b(arr_a);
}
fn b(arr_b: [i32; 1024]) {
// ... do stuff with arr_b here
}
Run Code Online (Sandbox Code Playgroud)
用 Rust 术语来说,当b
被调用时,a
sarr_a
将被移动到b
s中arr_b
。在幕后,整个数组是否总是被复制到堆栈上,或者编译器是否有可能通过简单地使用arr_a
内存地址处的数据来优化它,而不复制它?如果是后者,编译器的哪一部分应该负责?LLVM?
注意:我知道我们可以保证数组的数据不会通过使用引用/切片来复制,但这不是这个问题的目的。
归档时间: |
|
查看次数: |
683 次 |
最近记录: |