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 、为啥把数据放到堆还会溢出,是因为数据还是在栈上初始化然后转移到堆上的吗
1
leavelet 2022-06-01 18:37:25 +08:00 via iPhone
没能成功复现
|
2
Coelacanthus 2022-06-01 18:39:10 +08:00 via Android 1
关于第二个问题,是的,Box 是先在栈上初始化然后移动到堆上,这是个已知问题
|
3
Coelacanthus 2022-06-01 18:42:33 +08:00 via Android 1
关于第一个问题,你是不是 Windows ,Windows 默认用户栈只有 1M ,那肯定会炸
Linux 一般默认 8M |
4
starlz OP @Coelacanthus 是的,刚发现 Windows 的栈默认只有 1M...
|
5
leavelet 2022-06-01 19:21:50 +08:00
macos 也是 8M ,所以没测出来
学到了 |
6
my3157 2022-06-07 18:53:12 +08:00
search box-syntax
|
7
oksbsb 2022-06-12 09:52:16 +08:00 1
|