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