关闭

Rust中文翻译15

标签: rust编程语言内存指针
822人阅读 评论(0) 收藏 举报
分类:
大多数使用垃圾回收的语言都默认在堆上分配内存.这就意味着每个值都要装箱.有很多原因导致他们这样设计,但是这超出了本书的范围.同样,也有很多优化设计导致它并不是100%这样工作的.垃圾回收器宁愿选择在堆上分配内存,也不使用栈和Drop操作来释放内存.

4.1.7 该用哪一种呢?

所以当栈又快又好用的时候,为什么我们还需要使用堆呢?一个重要的原因是,栈只给你提供了LIFO语义来管理内存.堆分配却可以提供更加通用的和任意的顺序来使用内存,同时附带一些开销.

通常情况下,你应当使用栈,Rust默认就是如此.LIFO语义很简单,这是在函数级别上的.这同样有两点影响:运行时效率和语义.

运行时效率:
管理栈上的内存是简单的:它仅仅有增加和减少一个单一值,即"栈指针".管理堆上的内存去不简单:堆上的内存可以在任意位置分配,分配任意大小,内存管理器必须确保内存是可以被重用的.
如果你对这一议题感兴趣,你可以在这篇文章中学习更多:http://www.cs.northwestern.edu/~pdinda/icsclass/doc/dsa.pdf

语义的影响:
栈分配影响到了Rust语言自身,也影响到了程序员的思维.LIFO模式是Rust语言自动内存管理的模式.就连被唯一拥有的堆内存也可以被以这种模式管理.非LIFO模式的灵活性会导致在运行时CPU无法推导出哪里的内存需要被释放;它就需要依赖于动态协议,来自语言外部的机制来驱动内存释放(引用计数,通过Rc<T>和Arc<T>来实现,就是一种例子).

最极端的,堆分配内存既耗费了运行时(垃圾回收机制)又增加了程序员的编写开销(显示管理内存的话Rust并不提供验证).
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:32449次
    • 积分:693
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:33篇
    • 评论:13条
    文章分类
    最新评论