Rust中文翻译15
来源:互联网 发布:linux递归设置权限 编辑:程序博客网 时间:2024/04/20 17:58
大多数使用垃圾回收的语言都默认在堆上分配内存.这就意味着每个值都要装箱.有很多原因导致他们这样设计,但是这超出了本书的范围.同样,也有很多优化设计导致它并不是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
- Rust中文翻译15
- Rust中文翻译1
- Rust中文翻译2
- Rust中文翻译3
- Rust中文翻译4
- Rust中文翻译5
- Rust中文翻译6
- Rust中文翻译7
- Rust中文翻译8
- Rust中文翻译9
- Rust中文翻译10
- Rust中文翻译11
- Rust中文翻译12
- Rust中文翻译13
- Rust中文翻译14
- Rust中文翻译16
- Rust中文翻译17
- Rust中文翻译18
- asp:UpdatePanel客户端回传事件管理
- 【持久层】JDBC详解之基本操作
- c语言中的指针
- 最大工作量问题
- MAC OS X下的玩转Chromium源码
- Rust中文翻译15
- Putty自动登陆 参数化设置:使用指定用户自动登录参数
- [C++]字节对齐与结构体大小
- JavaIO总结(二)
- IOS小技巧——如何将美工的16进制颜色转换成IOS中的RGB颜色
- Servlet生命周期
- JAVA基础-面向对象之继承与多态
- 平均脸
- javaweb(三):使用response实现定时刷新