锈堆尺寸

时间:2018-12-31 04:18:40

标签: rust

我正在尝试初始化形状为[[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字节(仅一个MB以上),并且当我在发行版中运行或使用cargo run时,将为程序分配不同大小的堆栈。

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

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

1 个答案:

答案 0 :(得分:1)

在局部范围内声明变量后,该变量将保留在堆栈中。由于堆栈容量不足以声明的变量,因此会出现堆栈溢出错误。我建议快速浏览一下本书的section on the stack and the heap

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