gpt4 book ai didi

arrays - 大于 1022x1022 的数组的段错误

转载 作者:行者123 更新时间:2023-11-29 08:22:27 25 4
gpt4 key购买 nike

我不了解 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);
}

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

最佳答案

你有一个堆栈溢出(多么讽刺,嘿?)。

这个问题有两种解决方法:

  1. 不要在堆栈上分配大数组,而是使用堆 (Vec)
  2. 只在大堆栈上这样做。

不用说,使用 Vec 就简单多了;你可以使用 Vec[f64; MAX] 如果你愿意的话。

如果你非要用栈,那我就给你重定向to this question .

关于arrays - 大于 1022x1022 的数组的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40261308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com