返回顶部
首页 > 资讯 > 后端开发 > GO >Go与Rust之间的垃圾回收性能和类别
  • 673
分享到

Go与Rust之间的垃圾回收性能和类别

2024-04-04 23:04:39 673人浏览 独家记忆
摘要

小伙伴们对golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Go与Rust之间的垃圾回收性能和类别》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点

小伙伴们对golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Go与Rust之间的垃圾回收性能和类别》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我读到了一些关于 Go GC 的堆栈溢出。

Go 垃圾收集器中的堆栈和堆模型 我想知道如果Go中需要在堆或栈中定义一个变量,然后GC要收集它,用什么算法

如果我们假设在具有 GC 的语言中,堆效率更高,那么 Rust 又如何呢?与 Go 相比,Rust 是如何处理这个问题的?

特别是关于 Go 中的引用计数器,大多数时候我们别无选择去询问编译器,但这样的工具是存在的,并且它以自己的方式完成其工作!

我读到了这个: Go 中结构的堆栈分配与堆分配,以及它们与垃圾收集的关系


解决方案


这个问题是基于 rust 管理内存的错误假设。它不是。除了分配器和 std 中可以使用的工具之外,编译器不会在没有要求的情况下执行任何操作。

rust 使用 RaiI (Resource acquisition is initialization),除非您专门创建 std::rc::rc<t>,例如

fn main() {
    let my_rc = std::rc::Rc::new(5);
    let my_rc_cloned = my_rc.clone();

    println!("original: {}, cloned: {}", my_rc, my_rc_cloned);
} // both Rc's are dropped, refcount is 0, and 5 is dropped too

不涉及引用计数。曾经。像任何低级编程语言(例如 c)一样,将值从当前线程堆栈中推送和弹出。

let rc = rc::new(value: t);,创建一个新的结构体,在堆栈上,c++也使用raii,std::shared_ptr<int> rc(new int(5));就是这样在其中创建引用计数指针。

两个 rc 都在堆栈上,一旦特定块从堆栈中弹出,它们就会被删除/销毁。这就是 raii 的工作原理,无需赘述任何细节。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持编程网!更多关于Golang的相关知识,也可关注编程网公众号。

您可能感兴趣的文档:

--结束END--

本文标题: Go与Rust之间的垃圾回收性能和类别

本文链接: https://lsjlt.com/news/595700.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作