先看代码:
fn main(){
let v = [1,2,3,4,5];
let addr = &v[0] as *const i32 as usize;
println!("arr={}, addr=0x{:X}", v.len(), addr);
//
let top = 1;
let addr1 = &top as *const i32 as usize;
println!("stack top:0x{:X}", addr1);
}
编译:
rustc array.rs
运行:
./array
输出:
arr=5, addr=0x7FFE93DDCF1C
stack top:0x7FFE93DDCFA4
地址很接近,说明rust的数组是在栈上分配的。
可是:如果不从语法上限制,如何保障栈上的大数组在多次调用后导致栈溢出呢?
后面有时间要看看反汇编的代码。
原文:https://www.cnblogs.com/ahfuzhang/p/13669593.html