我正在尝试初始化形状为[[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字节(仅一个MB以上),并且当我在发行版中运行或使用cargo run
时,将为程序分配不同大小的堆栈。
Box
内的堆吗?我真的希望此数组尽可能快地查找。
答案 0 :(得分:1)
在局部范围内声明变量后,该变量将保留在堆栈中。由于堆栈容量不足以声明的变量,因此会出现堆栈溢出错误。我建议快速浏览一下本书的section on the stack and the heap。
在如此大的对象中,在Box
中声明它们会使它们存储在堆中,这对于您来说可能是更明智的选择。