2016-12-26 5 views
1

Ich habe einige Analysen in Rust zu tun. Daher habe ich eine ziemlich große Nachschlagetabelle, die ein mehrdimensionales Array erstellt, das 430.467.210 Bytes benötigt. Ich habe viele Male versucht, das in Rust zu laden, aber ich bekomme immer wieder Stapelüberläufe. Vor kurzem habe ich über die Heap-Zuweisung mit Box gelernt und habe versucht, meine Datei in die Box-Scheibe zu lesen. Es immer noch nicht funktioniert:Datei in eine Schachtel schneiden

let mut temp_buffer = Box::new([0u8; 430467210]); 
move_file.read(&mut *temp_buffer); 
+0

Warum mmmap es nicht? vgl. https://crates.io/crates/memmap – ArtemGr

Antwort

3

A geschachtelte Anordnung kann immer noch vorübergehend die Arraystapel-zuzuteilen, bevor es auf die Halde (insbesondere in nicht optimierten Versionen) zu bewegen. Um sicherzustellen, Heap-Zuweisung von Anfang an, verwenden Sie stattdessen einen Vektor:

let mut temp_buffer = vec![0u8; 430467210]; 
move_file.read(&mut temp_buffer); 
+0

Whoa, so langsam wie das ist, es funktioniert. Vielen Dank! –

+0

@wateriswet Es sollte nicht langsamer sein als die Array-Version (außer für die Zeit, die benötigt wird, um den Platz auf dem Heap zu reservieren, der durch den tatsächlichen Wert in den Schatten gestellt werden sollte). Wie messen Sie die Zeit? Kompilieren Sie mit aktivierten Optimierungen? – Vladimir