Sto scrivendo un'applicazione di creare Arc
oggetti di grandi array:Come dovrei inizializzare un `Arco <[u8; 65536]>` in modo efficiente?
use std::sync::Arc
let buffer: Arc<[u8; 65536]> = Arc::new([0u8; 65536]);
Dopo profiling questo codice, ho trovato che un memmove
è in corso, rendendo questo lento. Con altre chiamate a , il compilatore sembra abbastanza intelligente da inizializzare i dati memorizzati senza il memmove
.
ci crediate o no, il codice di cui sopra è più veloce di:
use std::sync::Arc;
use std::mem;
let buffer: Arc<[u8; 65536]> = Arc::new(unsafe {mem::uninitialized})
Che è un po 'una sorpresa.
Insights, mi aspetto che questo sia un problema del compilatore.
Vale la pena notare che la RFC lei ha citato è stata fusa con il [RFC MIR (Mid-Livello intermedio Rappresentazione)] (https://github.com/rust- lang/rfcs/pull/1211), che è una [priorità di lavoro per il 2016] (http://blog.rust-lang.org/2015/08/14/Next-year.html). FYI :) –
Grazie! Non è un grosso problema, aspetterò questa ottimizzazione. Sarebbe bello se potesse funzionare per "non inizializzato" – Greg