【小實驗】rust的數組是在堆上分配還是在棧上分配的呢?


先看代碼:

 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++一樣了
  • 如果要防止,則每個函數調用必然有檢查棧溢出的指令。這樣也必然影響性能。

后面有時間要看看反匯編的代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM