arrays heap rust

arrays - ¿Cómo asignar matrices en el montón en Rust 1.0?



heap (1)

El problema es que la matriz se pasa a la función Box::new como argumento, lo que significa que debe crearse primero , lo que significa que debe crearse en la pila .

Le está pidiendo al compilador que cree 8 megabytes de datos en la pila: eso es lo que lo desborda.

La solución es no usar una matriz de tamaño fijo, sino una Vec . La forma más simple en que puedo pensar para hacer un Vec de 8 millones 10.0 es esta:

fn main() { const SIZE: usize = 1024 * 1024; let v = vec![10.0; SIZE]; }

O, si por alguna razón prefieres usar iteradores:

use std::iter::repeat; fn main() { const SIZE: usize = 1024 * 1024; let v: Vec<_> = repeat(10.0).take(SIZE).collect(); }

Esto solo debe realizar una única asignación de montón.

Tenga en cuenta que posteriormente puede tomar un Vec y convertirlo en un Box<[_]> utilizando el método into_boxed_slice .

Ver también:

  • Comparación de rendimiento de un Vec y un sector en caja

Ya hay una question para esto, pero está relacionada con Rust 0.13 y la sintaxis parece haber cambiado. De la documentation actual, entendí que crear una matriz en el montón sería algo como esto:

fn main() { const SIZE: usize = 1024 * 1024; Box::new([10.0; SIZE]); }

Pero cuando ejecuto este programa me sale el siguiente error:

thread ''<main>'' has overflowed its stack

¿Qué estoy haciendo mal?