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 runcargo test --release 运行时,我的程序按预期运行。我认为这意味着堆栈根本不够大,无法处理 8 * 64 * 4096 字节(仅超过 1 MB),并且当我在 release 中运行或使用cargo run 运行时,会为程序分配不同大小的堆栈。

我关于用完堆栈的假设是否正确? 我可以将数组分配给Box 内的堆吗? 这是最好的选择吗?

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

【问题讨论】:

堆栈仅“更快”用于分配操作,因为它是 O(1),一旦您在堆上分配数组,它将与任何堆栈分配对象一样快。不要在堆栈上使用大尺寸数组。 为程序分配了不同大小的堆栈——值得怀疑。更有可能优化器刚刚完全丢弃了您的所有代码,因为它从未使用过。但是,您忽略了提供任何代码。 【参考方案1】:

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

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

【讨论】:

以上是关于Rust 堆栈大小 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Rust - 调试与发布模式的堆栈大小是不是不同?

Visual Studio C/C++ 数组大小未处理的异常堆栈溢出 [重复]

如何增加 Rust 库可用的堆栈大小?

是否可以在 Rust 运行时确定大小的堆栈分配数组?

如何在 C# 中增加堆栈大小? 1MB 是不够的。我有 32GB 的可用 RAM [重复]

堆栈内存和堆内存之间的区别[重复]