6
我正在写一个应用程序中创建大型阵列的Arc
对象:我应该如何有效地初始化`Arc <[u8; 65536]>`?
use std::sync::Arc
let buffer: Arc<[u8; 65536]> = Arc::new([0u8; 65536]);
剖析此代码后,我发现一个memmove
发生,使这种缓慢。通过对的其他调用,编译器似乎非常聪明,可以在没有memmove
的情况下初始化存储的数据。
不管你信不信,上面的代码快于:
use std::sync::Arc;
use std::mem;
let buffer: Arc<[u8; 65536]> = Arc::new(unsafe {mem::uninitialized})
这是一个有点意外的。
见解欢迎,我希望这是一个编译器问题。
值得注意的是你提到的RFC已经被合并到[MIR(中级中间表示)RFC(https://github.com/rust- lang/rfcs/pull/1211),这是[2016年的工作重点](http://blog.rust-lang.org/2015/08/14/Next-year.html)。 FYI :) –
谢谢!这不是一个巨大的阻力,我会等待这个优化。如果它能用于“未初始化” – Greg