首页 > 解决方案 > Rust 堆栈大小

问题描述

我正在尝试使用 shape 初始化一个大型数组[[u64; 4096]; 64]。当我尝试初始化这个数组时,[[0; 4096]; 64]我会根据程序的运行方式得到不同的结果。

当我运行时,cargo test出现以下错误:

thread '' has overflowed its stack
fatal runtime error: stack overflow

当我运行cargo run或者cargo test --release我的程序按预期运行时。我认为这意味着堆栈根本不够大,无法处理 8 * 64 * 4096 字节(刚刚超过 1 MB),并且当我在发行版中运行或cargo run为程序分配不同大小的堆栈时。

我真的希望尽可能快地查找这个数组。

标签: rust

解决方案


在本地范围内声明变量后,它就会保存在堆栈中。由于您的堆栈容量不足以容纳您声明的变量,因此您会收到堆栈溢出错误。我建议快速查看本书关于stack 和 heap的部分。

在如此大的对象中,在 a 中声明它们Box会使它们存储在堆中,这对您来说可能是更明智的选择。


推荐阅读