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

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

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

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

这两种想法有什么区别?

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

回答


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

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

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

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

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






推荐阅读
  • 1、上机的形式全国所有院校的机试都大同小异,大部分院校都有自己的OJ系统,一般通过OJ在线做题的方式来进行考核,一般要求在2-3个小时解决5-8道算法题。所谓OnlineJud ... [详细]
  • 标签PostgreSQL,Linux,perf,性能诊断,stap,systemtap,strace,dtrace,dwarf,profiler,perf_events,probe ... [详细]
  • 参考:C#复制粘贴窗体参考:VS修改项目解决方案名称一、复制窗体在“解决方案资源管理器”(以下简称:管理器)中选择要复制的窗体,比如要复制Form2,则在Form2.cs上右单击, ... [详细]
  • jdk安装与环境变量配置,看这一篇就够了
    文章目录场景jdk下载安装如何环境变量的配置总结场景在做java开发或者android开发,经常会碰到jdk安装与环境变量的配置,每次配置的时候,经常需要去查看一下,而且偶尔还会出 ... [详细]
  • 编译linux搭建vs2015,使用Vs2015开发linux(centos7)程序
    1.首先下载vs2015withupdate32.然后下载VisualCforLinuxDevelopment3.在centos7上yuminstallopenssh-server ... [详细]
  • 在ROS系统中,参数读写一般通过xml或者yaml格式的文件,其中yaml用得比较多。这是一种可读性高,轻量级的标记语言,简单好用。对于yaml文件,ros中用的较早版本的yaml- ... [详细]
  • vector:在vc6中,如果要镶嵌使用vector,如vector,后面的两个应该用,空格隔开,否则被编译器认为是移位符string::npos的值为 ... [详细]
  • 最近用python写了一个小程序,想发布出去让人试用又不想暴露源码,搜索了一下发现将py文件编译成pyd文件就能达到目的。转换过程很简单,但是在调用pyd文件并且打包为单个exe文 ... [详细]
  • 7月9日结束了我的小学期后,正式开始了我的假期生活。这个星期,初步了解了一些Java的基础知识。1.JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需 ... [详细]
  • 一、在androidStudio中实现tabs比较简单,新建项目就可以选择tabs模板进行创建,默认实现tabs功能:直接运行项目就可以看到效果:可以说非常简单,但是我们在实际开发 ... [详细]
  • apk简单介绍APK的组成apk安装流程app的启动过程apk打包流程AIDLAIDL介绍为什么要设计这门语言它有哪些语法?默认支持的数据类型包括什么是apk打包流程 ... [详细]
  • 在VS(VisualStudio)2017下编译C语言程序,如果使用了scanf()、gets()、strcpy()、strcat()等与 ... [详细]
  • c语言自定义BOOL函数C语言没有BOOL类型变量boolean类型是C++所独有的由于使用BOOL类型可以使代码更具有可读性,很多编程者都在C中自己定义了类似的应用,一般方法有两 ... [详细]
  • 电脑是如何启动的?为什么电脑断电后系统时间任然在走,短时间内启动电脑后系统时间不会发生偏差?远程开机是如何实现的?为什么电脑 ... [详细]
  • 【实践】基于RTThread的智慧路灯案例实验分享
    之前分享了基于LiteOS的智慧农业案例实验分享基于LiteOS的智慧农业案例实验分享,阅读量挺不错,看样子大家都挺喜欢这种实验。那咱们就再来一个类似的实验:基于RT-Thread ... [详细]
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社区 版权所有