先看代碼:
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的數組是在棧上分配的。
可是:如果不從語法上限制,如何保障棧上的大數組在多次調用后導致棧溢出呢?
- 如果不防止棧溢出,那么就和C++一樣了
- 如果要防止,則每個函數調用必然有檢查棧溢出的指令。這樣也必然影響性能。
后面有時間要看看反匯編的代碼。