Bronze

Rust 垃圾回收器
授权协议 BSD
开发语言 C/C++ Rust
所属分类 开发工具、 性能测试和优化
软件类型 开源软件
地区 不详
投 递 者 唐海阳
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Bronze 是用于 Rust 的基于库的垃圾回收器。

Bronze 通过引入一种新的智能指针类型 GcRef 来放宽 Rust 的部分限制,GcRef 描述了一个指向垃圾回收堆位置 (heap location) 的指针。使用 Bronze 时,位于堆栈 (stack) 上的数据具有所有常见的 Rust ownership 要求。但 Bronze 允许将数据移动到堆 (heap)。如果类型的值T在堆上,Bronze 允许GcRef<T>对该值进行任意数量的类型引用。

示例

如果不使用 Bronze,则需要仔细管理引用和生命周期:

pub struct IntContainer {
    n: i32,
}

pub fn set(c: &mut IntContainer, n: i32) {
    c.n = n;
}

pub fn test() {
    let c1 = IntContainer{n: 42};
    let mut c2 = c1;
    
    // Can't use c1 anymore because it's been moved to c2
    set(&mut c2, 42);
}

使用 Bronze

// 
#[derive(Trace, Finalize)]
pub struct IntContainer {
    n: i32,
}

pub fn set(mut c: GcRef<IntContainer>, n: i32) {
    c.n = n;
}

pub fn test() {
    let c1 = GcRef::new(IntContainer{n: 42});
    let c2 = c1; 
    // Now c1 and c2 both reference the same object.
    
    set(c2, 42);
    set(c1, 43);
    // Now they both reference an object with value 43.
}
  • 题目描述 众所周知,奶牛是非常有社交礼貌的动物:每当两头奶牛分开后相遇,它们都会用友好的“哞哞”声互相问候。 奶牛贝茜和她的朋友艾希正在农夫约翰的农场中的一条很长的道路上散步。 我们可以将此道路视为一个一维数轴。 贝茜和艾希都从原点出发,以相同的速度(1 单位距离/单位时间)行走一段时间。 请根据每头奶牛的运动情况描述,确定它们相互打招呼的次数。 贝茜和艾希可以在不同的时间点停止移动,并且她们的移

  •        今天来分享一下我做过的几道Usaco的比较简单的题,Usaco是美国的一个c++竞赛比赛,但是全球各地的人都可以参加,Usaco没有监考,全凭诚信,但是你拿着这个 作弊 借鉴来的成绩,所有美国的大学都会把你拒之门外,其他国家我就不大清楚了。好像也许可能是因为系统会自动给你评估实力,判断有没有 作弊 emm......         好啦,废话少说,上题目! 题目大意: Bessie

  •         今天继续来分享我做过usaco的比较简单,适合初学者的题。         刷了那么多题目,可能有的程序猿会问:“小编,你是不是要预备考试呀?”我想回答大家的是:“不是,我学习c++只不过是拓展了兴趣爱好,并不是想进军专业(可能能力不够,【捂脸】)”其实也是想给你们分享一些思维类的好题,以便有der程序猿做不来,可以查找文章。在此也非常感谢那些默默在支持我的人们,虽然大家没有点赞,

  •  Problem 1. Sleeping in Class Bessie the cow was excited to recently return to in-person learning! Unfortunately, her instructor, Farmer John, is a very boring lecturer, and so she ends up falling asl

  • 题目描述 厌倦了农场寒冷的冬季天气,奶牛贝茜计划飞往一个温暖的目的地度假。 不幸的是,她发现只有一家航空公司,博维尼亚航空,愿意向奶牛出售机票,而且这些机票的结构有些复杂。 博维尼亚航空公司拥有 N 架飞机,每架飞机都在由两个或多个城市组成的特定“航线”上飞行。 例如,一架飞机可能从城市 1 起飞,然后飞到城市 5,然后飞到城市 2,最后飞到城市 8。 没有一个城市会在一条航线上出现多次。 如果贝

  • Problem 1. Photoshoot 迫切希望在郡县集市上赢得最佳奶牛摄影师的 Farmer John 正在尝试为他的 NN 头奶牛拍摄一张完美的照片(2≤N≤2⋅10^5,N 为偶数)。 Farmer John 拥有两种品种的奶牛:更赛牛(Guernsey)和荷斯坦牛(Holstein)。为了使他的照片尽可能地艺术,他想把他的奶牛排成一排,使得尽可能多的更赛牛处于队列中的偶数位置(队列中的

  • 题目描述 由于高传染性的牛传染病 COWVID-19 的爆发,Farmer John 非常担忧他的奶牛们(编号为 1…N)的健康。最近,Farmer John 对他的所有奶牛进行了检测,发现有一部分奶牛对该疾病的检测结果呈阳性。利用牛棚内的视频监控,他得以查看最近的奶牛之间的互动行为,结果发现奶牛们互相打招呼时,她们会握蹄,不幸的是这是一种会将疾病从一头奶牛传播给另一头奶牛的行为。Farmer J

  • Problem 1. Lonely Photo Farmer John 最近购入了 N 头新的奶牛(3≤N≤5×10^5),每头奶牛的品种是更赛牛(Guernsey)或荷斯坦牛(Holstein)之一。 奶牛目前排成一排,Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然而,他不想拍摄这样的照片,其中只有一头牛的品种是更赛牛,或者只有一头牛的品种是荷斯坦牛——他认为这头奇

  • Problem 1. Herdle 奶牛们发明了一种名为 Herdle 的新型解谜游戏,在牛界引起了轰动。 每天都会有一个新谜题发布供奶牛解决。游戏采用 3x3 方阵的形式表示农场的一块田地,田地的每个方格都由特定品种的奶牛占据。总共只有 26 种可能的品种,每一种由 A 到 Z 中的不同大写字母标识。玩家不会被告知田地中的奶牛品种排列方式——游戏目标是通过一系列猜测确定它们。 每次猜测,奶牛们输

  • #include<bits/stdc++.h> using namespace std; int main(){                    char a[10][10];     int i, j;     for(i = 0; i < 10; i++){         for(j = 0; j < 10; j++){             cin >> a[i][j];     

  • 如你所见,今天也是一道奶牛的题(奶牛万岁!) 我们先来看题: 描述 一个关于奶牛的鲜为人知的事实是它们其实是红绿色盲,也就是说红色和绿色在它们看来完全一样。 这使得设计出对奶牛和人类都有巨大吸引力的艺术作品变得非常困难。 考虑一个正方形绘画,它用一个字符矩阵来描述,每个字符要么是 R(红色),要么是 G(绿色),要么是 B(蓝色)。 如果一幅画有许多可以彼此区分的彩色“区域”,那么它就很有趣。 如

  • 一、题目描述 Farmer John has N (1≤N≤10^5) cows, the breed of each being either a Guernsey or a Holstein. They have lined up horizontally with the cows occupying positions labeled from 1…N. Farmer John 有 N(1

  • Farmer John 的奶牛正在 "mooZ" 视频会议平台上举行每日集会。她们发明了一个简单的数字游戏,为会议增添一些乐趣。 Elsie 有三个正整数 A、B 和 C(A≤B≤C)。这些数字是保密的,她不会直接透露给她的姐妹 Bessie。她告诉 Bessie 七个范围在 1…10^9 之间的整数(不一定各不相同),并宣称这是 A、B、C、A+B、B+C、C+A 和 A+B+C 的某种排列。

 相关资料
  • 垃圾回收 我们对生产中花了很多时间来调整垃圾回收。垃圾回收的关注点与Java大致相似,尽管一些惯用的Scala代码比起惯用的Java代码会容易产生更多(短暂的)垃圾——函数式风格的副产品。Hotspot的分代垃圾收集通常使这不成问题,因为短暂的(short-lived)垃圾在大多情形下会被有效的释放掉。 在谈GC调优话题前,先看看这个Attila的报告,它阐述了我们在GC方面的一些经验。 Scal

  • 对于开发者来说,JavaScript 的内存管理是自动的、无形的。我们创建的原始值、对象、函数……这一切都会占用内存。 当我们不再需要某个东西时会发生什么?JavaScript 引擎如何发现它并清理它? 可达性(Reachability) JavaScript 中主要的内存管理概念是 可达性。 简而言之,“可达”值是那些以某种方式可访问或可用的值。它们一定是存储在内存中的。 这里列出固有的可达值的

  • 垃圾收集,引用计数,显式分配 和所有的现代语言一样,OCaml提供垃圾收集器,所以你不用像C/C++一样显式地分配和释放内存。 JWZ在他的文章 "Java sucks" rant(Java蛋疼(怒)!): 第一个好家伙是Java没有 free()。其他的都没有所谓了。这几乎掩盖了所有的缺点,不管有多糟糕, 这个有点让后续文档基本都没有意义了,但是...(译注:但是啥大家自己看吧) OCaml的垃

  • 主要内容:垃圾回收器函数,实例Lua 采用了自动内存管理。 这意味着你不用操心新创建的对象需要的内存如何分配出来, 也不用考虑在对象不再被使用后怎样释放它们所占用的内存。 Lua 运行了一个垃圾收集器来收集所有死对象 (即在 Lua 中不可能再访问到的对象)来完成自动内存管理的工作。 Lua 中所有用到的内存,如:字符串、表、用户数据、函数、线程、 内部结构等,都服从自动管理。 Lua 实现了一个增量标记-扫描收集器。 它使用

  • 主要内容:1 什么是Java 垃圾回收,2 Java 垃圾回收的优势,3 如何取消对象引用,4 finalize()方法,5 gc()方法,6 Java 垃圾回收的例子1 什么是Java 垃圾回收 在Java中,垃圾意味着未引用的对象。 垃圾回收是自动回收运行时未使用的内存的过程。换句话说,这是销毁未使用对象的一种方法。 我们在C语言中使用free() 函数,在C ++中使用delete()。但是,在Java中它是自动执行的。因此,java提供了更好的内存管理。 2 Java 垃圾回收的优势 它

  • 问题内容: 我想知道Java中发生的垃圾回收。它真的能够处理所有未使用的对象并释放最大可能的内存吗? 我还想知道Java垃圾收集与另一种语言(例如C#)相比如何?然后,如何自动垃圾收集与从像C这样的语言中进行手动收集相比又能达到更好的效果呢? 问题答案: 是的,这就是垃圾收集的重点。 有许多不同形式的垃圾收集。如果不增强算法,最简单的形式即引用计数就无法处理某些类型的垃圾(循环引用)。 Java(

  • 问题内容: 我创建了一些python代码,该代码在一个循环中创建了一个对象,并且在每次迭代中均使用新的相同类型的对象覆盖了该对象。这完成了10.000次,Python每秒占用7mb的内存,直到使用了我的3gb RAM。有谁知道从内存中删除对象的方法吗? 问题答案: 您没有提供足够的信息-这取决于您要创建的对象的详细信息以及您在循环中对该对象所做的其他操作。如果对象未创建循环引用,则应在下一次迭代时

  • 问题内容: 如果我不关闭结果集或preparedstatement,会发生什么。 它们会被垃圾收集器关闭并释放吗? 我在问函数内部的局部变量。 您知道有关此的任何文档吗? 问题答案: 如果您的代码不接近S或S使用,然后做的时候,你的申请将养猪稀缺资源-就像光标- 在数据库中。参见,例如: 连接关闭时,ResultSet没有关闭吗? 当原始resultSet从方法返回到新对象时会发生什么? 垃圾收集