热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Rust的内存管理与编译时垃圾收集有何不同?

我读过Rust的编译器在编译时“插入”内存管理代码,这听起来有点像“编译时垃圾收集”。这两种想法有什么区别?我看过Rust有什么而不​​是垃圾收集器?但那

我读过 Rust 的编译器在编译时“插入”内存管理代码,这听起来有点像“编译时垃圾收集”。

这两种想法有什么区别?

我看过Rust 有什么而不​​是垃圾收集器?但那是关于运行时垃圾收集,而不是编译时。

回答


编译时垃圾回收通常定义如下:

自动内存管理的一种补充形式是编译时内存管理 (CTGC),其中内存管理决策是在编译时而非运行时做出的。编译器确定在程序执行期间创建的变量的生命周期,因此也确定将与这些变量关联的内存。每当编译器可以保证一个变量,或者更准确地说,这个变量在运行时指向的部分内存资源,永远不会在某个程序指令之外被访问,那么编译器可以添加指令来释放这些资源该特定指令不会影响结果代码的正确性。

(来自Nancy Mazur 的声明性语言 Mercury 的编译时垃圾收集)

Rust 通过使用所有权和借用检查的概念来处理内存。所有权和移动语义描述哪个变量拥有一个值。借用描述允许哪些引用访问值。这两个概念允许编译器在值不再可访问时“删除”该值,从而导致程序dtopDroptrait调用该方法)。

但是,编译器本身根本不处理动态分配的内存。它只处理掉线检查(确定何时调用drop)和插入.drop()调用。该drop实施是负责确定在这一点上发生了什么,无论是重新分配一些动态内存(这是什么Boxdrop呢,例如),或者做任何事情。因此,编译器从来没有真正强制执行垃圾回收,也不会强制释放未使用的内存。所以我们不能声称 Rust 实现了编译时垃圾收集,即使 Rust 所拥有的很让人想起它。






推荐阅读
author-avatar
嘻嘻2502891803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有