【发布时间】:2017-02-23 10:58:13
【问题描述】:
我有以下代码要从文件中读取:
let mut buf: Box<[u8]> = Box::new([0; 1024 * 1024]);
while let Ok(n) = f.read(&mut buf) {
if n > 0 {
resp.send_data(&buf[0..n]);
} else {
break;
}
}
但它会导致:
fatal runtime error: stack overflow
我在 OS X 10.11 上使用 Rust 1.12.0。
【问题讨论】:
-
在这种情况下
f是什么? -
这是一个 mio::tcp::TcpStream
-
你的堆栈的默认大小是多少?因为
Box::new([0; 1024 * 1024])将在堆栈上分配 1MB,然后再将其移动到框。 -
@ElefEnt:正在开发中 (placement_new_protocol)。同时,我建议创建一个
Vec,然后通过into_boxed_slice将其转换为Box。 -
对于这种特殊情况,使用 Vec 或 Box 无关紧要,因此您也可以只使用 Vec 而不是转换。
标签: rust