【发布时间】: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),一旦您在堆上分配数组,它将与任何堆栈分配对象一样快。不要在堆栈上使用大尺寸数组。
-
为程序分配了不同大小的堆栈——值得怀疑。更有可能优化器刚刚完全丢弃了您的所有代码,因为它从未使用过。但是,您忽略了提供任何代码。
标签: rust