Rust 堆栈大小 [重复]
Posted
技术标签:
【中文标题】Rust 堆栈大小 [重复]【英文标题】:Rust stack size [duplicate] 【发布时间】:2019-05-27 18:07:21 【问题描述】:我正在尝试初始化一个形状为[[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),并且当我在 release 中运行或使用cargo run
运行时,会为程序分配不同大小的堆栈。
Box
内的堆吗?
这是最好的选择吗?
我真的希望尽可能快地查找这个数组。
【问题讨论】:
堆栈仅“更快”用于分配操作,因为它是 O(1),一旦您在堆上分配数组,它将与任何堆栈分配对象一样快。不要在堆栈上使用大尺寸数组。 为程序分配了不同大小的堆栈——值得怀疑。更有可能优化器刚刚完全丢弃了您的所有代码,因为它从未使用过。但是,您忽略了提供任何代码。 【参考方案1】:在本地范围内声明变量后,它就会保存在堆栈中。由于您的堆栈容量不足以容纳您声明的变量,因此您会收到堆栈溢出错误。我建议在stack and the heap 上快速查看本书的部分。
在如此大的对象中,将它们声明在 Box
中会使它们存储在堆中,这对您来说可能是更明智的选择。
【讨论】:
以上是关于Rust 堆栈大小 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio C/C++ 数组大小未处理的异常堆栈溢出 [重复]