关于初始化一个 1024*1024 的 u8 数组导致 STACK_OVERFLOW 的疑惑

2022-06-01 16:13:38 +08:00
 starlz
fn main() {

    let _a = [0u8; 1024*1024];  //这行会溢出

    let _b = Box::new([0u8; 1024*1024]);  //这行也会溢出

    let _c = vec![0u8; 1024].into_boxed_slice(); //最终解决方案
}

1 、为啥初始化一个 1M 的数组就会导致溢出

2 、为啥把数据放到堆还会溢出,是因为数据还是在栈上初始化然后转移到堆上的吗

1440 次点击
所在节点    Rust
7 条回复
leavelet
2022-06-01 18:37:25 +08:00
没能成功复现
Coelacanthus
2022-06-01 18:39:10 +08:00
关于第二个问题,是的,Box 是先在栈上初始化然后移动到堆上,这是个已知问题
Coelacanthus
2022-06-01 18:42:33 +08:00
关于第一个问题,你是不是 Windows ,Windows 默认用户栈只有 1M ,那肯定会炸
Linux 一般默认 8M
starlz
2022-06-01 18:50:17 +08:00
@Coelacanthus 是的,刚发现 Windows 的栈默认只有 1M...
leavelet
2022-06-01 19:21:50 +08:00
macos 也是 8M ,所以没测出来
学到了
my3157
2022-06-07 18:53:12 +08:00
search box-syntax
oksbsb
2022-06-12 09:52:16 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/856750

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX