Rust中文翻译15

翻译 2015年07月08日 00:47:17
大多数使用垃圾回收的语言都默认在堆上分配内存.这就意味着每个值都要装箱.有很多原因导致他们这样设计,但是这超出了本书的范围.同样,也有很多优化设计导致它并不是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并不提供验证).

相关文章推荐

Rust中文翻译4

Page 20 Cargo是Rust程序员们用来帮助管理Rust程序的工具.Cargo现在是1.0以前的版本,所以它还在完善中.然而,它已经足够好用了,所以我们还是建议从开始就使用Cargo...
  • zcmit
  • zcmit
  • 2015-06-17 22:29
  • 824

Rust中文翻译3

2.2 Hello World Page 17 现在你已经安装了Rust,让我们写下你的第一个Rust程序.用任何一种语言写下第一个程序的时候打印出"Hello World"是...
  • zcmit
  • zcmit
  • 2015-06-16 17:16
  • 809

Rust中文翻译12

Page 63 我们已经学习了如何写一些Rust代码了.但是能写Rust代码和能写好的Rust代码又很大区别. 这一章讲述一些相对独立的指南,告诉你如何把的Rust代码更进一步.一...
  • zcmit
  • zcmit
  • 2015-07-03 17:11
  • 800

Rust中文翻译9

Page 54 另一个奇怪的问题是:我们使用了_left和_right来命名.下划线是怎么回事?我们并没有计划在加锁时使用这两个变量.我们仅仅只想要得到它.因此,Rust会警告我们并没有使用...
  • zcmit
  • zcmit
  • 2015-07-02 11:37
  • 904

Rust中文翻译19

我们来讨论一下迭代器. 还记得Rust的for循环么?有一个例子: for x in 0..10 {     println!("{}", x); } 现在你更了解Rust了,我们可以讨论它的工作...
  • zcmit
  • zcmit
  • 2015-07-11 11:37
  • 708

Rust中文翻译20

Page 100 并发和并行在计算机科学中是非常重要的主题.在工业领域也很火.计算机如今有越来越多的核心,然而很多程序员还没有准备好使用它们. Rust安全的内存特性同样适用于并发存储.并发的...
  • zcmit
  • zcmit
  • 2015-07-11 15:49
  • 1141

Rust中文翻译28

5.9 引用和借用 本节是Rust三处描述所有权系统的其中之一.所有权是Rust最独特和引人注目的特性,这也是Rust程序员必须熟悉的一个特性.所有权使Rust得以实现它最大的设计目标,内存安全....
  • zcmit
  • zcmit
  • 2015-07-18 22:32
  • 533

Rust中文翻译23

4.9 Borrow 和 AsRef Borrow和AsRef特性特性很相似,但是不一样.这里有一个快速的关于两者的回顾. 4.9.1 Borrow Borrow特性...
  • zcmit
  • zcmit
  • 2015-07-13 15:20
  • 711

Rust中文翻译16

Page 75 Program testing can be a very effective way to show the presence of bugs, but it is hop...
  • zcmit
  • zcmit
  • 2015-07-08 23:17
  • 750

Rust中文翻译27

5.8 所有权 本节是Rust三处描述所有权系统的其中之一.所有权是Rust最独特和引人注目的特性,这也是Rust程序员必须熟悉的一个特性.所有权使Rust得以实现它最大的设计目标,内存安全.这里...
  • zcmit
  • zcmit
  • 2015-07-16 13:48
  • 519
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)