rust - Rust 堆栈大小
问题描述
我正在尝试使用 shape 初始化一个大型数组[[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),并且当我在发行版中运行或cargo run
为程序分配不同大小的堆栈时。
- 我关于用完堆栈的假设是否正确?
- 我可以将数组分配给 a 内的堆
Box
吗? - 这是最好的选择吗?
我真的希望尽可能快地查找这个数组。
解决方案
在本地范围内声明变量后,它就会保存在堆栈中。由于您的堆栈容量不足以容纳您声明的变量,因此您会收到堆栈溢出错误。我建议快速查看本书关于stack 和 heap的部分。
在如此大的对象中,在 a 中声明它们Box
会使它们存储在堆中,这对您来说可能是更明智的选择。
推荐阅读
- node.js - TypeError:无法读取未定义的属性“noop”
- python - 使用 python 语言从 Outlook 发送邮件时出现 SMTP 身份验证错误
- sql - 基于子字符串保留字符串
- javascript - 将流上传到 Aws S3 无法正常工作
- azure - Azure 数据工厂和 Azure Databricks 中的自定义脚本
- python - setup.py '_io.TextIOWrapper' 对象没有属性 'split'
- c# - 如果速度为 0 或更低,如何锁定相机水平旋转?
- javascript - 如何等待 Firebase 存储图像上传,然后运行下一个函数
- node.js - 将 Joi 升级到最新版本后出错 - 架构只能包含普通对象(名称)
- html - 旧的取消链接内容仍然出现在我的网站页面上