阵列大于1022x1022的分段故障

Jon*_*röm 0 arrays segmentation-fault rust

我不知道Rust,但我想研究科学计算中的表现,将其与Julia和Fortran进行比较.我设法编写了以下程序,但问题是当MAX大于1022 时我得到运行时分段错误.有什么建议吗?

fn main() {
    const MAX: usize = 1023;
    let mut arr2: [[f64;  MAX];  MAX] = [[0.0;  MAX];  MAX]; 

    let pi: f64 = 3.1415926535;
    // compute something useless and put in matrix
    for ii in 0.. MAX {
        for jj in 0.. MAX {
            let i = ii as f64;
            let j = jj as f64;
            arr2[ii][jj] = ((i + j) * pi * 41.0).sqrt().sin();
        }
    }

let mut sum0:f64 = 0.0;

//collapse to scalar like sum(sum(array,1),2) in other langs
for iii in 0..MAX {
    let vec1:&[f64] = &arr2[iii][..];
    sum0 += vec1.iter().sum();
}
println!("this {}", sum0);
}
Run Code Online (Sandbox Code Playgroud)

所以在终端中没有错误'Segmentaion fault'.我正在使用Ubuntu 16并在www.rustup.rs上安装命令.它是稳定的版本rustc 1.12.1 (d4f39402a 2016-10-19).

Mat*_* M. 6

你有一个Stack Overflow(多么具有讽刺意味,嘿?).

该问题有两种解决方案:

  1. 不要在堆栈上分配大数组,而是使用堆(Vec)
  2. 只能在大堆栈上执行此操作.

不用说,使用a Vec更容易; Vec[f64; MAX]如果你愿意,你可以使用.

如果你坚持使用堆栈,那么我会将你重定向到这个问题.