首页 > 编程语言 > 详细

【小实验】rust的数组是在堆上分配还是在栈上分配的呢?

时间:2020-09-14 22:18:01      阅读:112      评论:0      收藏:0      [点我收藏+]

先看代码:

 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++一样了
  • 如果要防止,则每个函数调用必然有检查栈溢出的指令。这样也必然影响性能。

后面有时间要看看反汇编的代码。

【小实验】rust的数组是在堆上分配还是在栈上分配的呢?

原文:https://www.cnblogs.com/ahfuzhang/p/13669593.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!