Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory management 自动内存管理==垃圾收集?_Memory Management_Garbage Collection - Fatal编程技术网

Memory management 自动内存管理==垃圾收集?

Memory management 自动内存管理==垃圾收集?,memory-management,garbage-collection,Memory Management,Garbage Collection,一位朋友正在用非英语写一本书,在翻译垃圾收集(GC)时遇到困难。另一方面,自动内存管理(AMM)翻译得非常好 维基百科声明GC是AMM的一种形式。同一篇文章还指出引用计数(RC)是垃圾收集的一种形式。所以,看起来AMM是GC的超集,GC是RC的超集。然而,有许多非正式文本交替使用GC和AMM。因此,似乎可以有把握地说,AMM(也称为GC)是通过跟踪指针或依靠引用计数来识别(不)可到达的对象来实现的 我的问题是:是否有任何AMM技术不能归类为GC?或者,同样地,GC和AMM之间的区别是否合理 请随

一位朋友正在用非英语写一本书,在翻译垃圾收集(GC)时遇到困难。另一方面,自动内存管理(AMM)翻译得非常好

维基百科声明GC是AMM的一种形式。同一篇文章还指出引用计数(RC)是垃圾收集的一种形式。所以,看起来AMM是GC的超集,GC是RC的超集。然而,有许多非正式文本交替使用GC和AMM。因此,似乎可以有把握地说,AMM(也称为GC)是通过跟踪指针或依靠引用计数来识别(不)可到达的对象来实现的

我的问题是:是否有任何AMM技术不能归类为GC?或者,同样地,GC和AMM之间的区别是否合理


请随意评论我对AMM(GC)分类法的胡乱猜测:-)

通常情况下,这些术语没有官方定义。但是,你可以考虑,例如C++是自动内存管理的一种形式。它与引用计数或垃圾收集非常不同。

我认为这更多是一个常见用法和读者期望的问题,而不是精确的定义。当然,任何自动内存管理技术都“收集垃圾”,因此都是GC。但在实践中,如果你说“GC”,人们会认为你指的是具有更具体属性的东西(通常是:不确定的终结、自动检测未引用的对象、收集周期的能力),如果你不这样做,就会感到困惑。

引用计数通常被视为GC,而且它可以以确定性的方式实现……我大部分时间是ObjC程序员,所以手动重新计数、自动重新计数和跟踪GC都是可用的选项。将refcounting称为GC确实让我们感到困惑:)你似乎是对的。我没有考虑这一点,因为我假设AMM只处理基于堆的对象。但是,再一次,一个人当然应该考虑智能指针作为AMM技术…当然,智能指针也使用引用计数,但是它们不同于通常的引用计数,因为计数被保存在指针中而不是对象本身。然而,维基百科仍然将其视为一种GC方法。这真的让鲶鱼人困惑。这个世界太复杂了……不翻译“垃圾收集”怎么样?这就是我和几乎所有我见过的人用我的母语谈论它时所做的。这毕竟是标准术语。嗯,这也是一种选择。但是,我发现用母语思考问题可以提高一个人的产出。当然,我们也可以用英语思考。但是,在母语人士面前,我们可能处于劣势……在我的书中,一个好的外来词总比一个糟糕的翻译好。理解母语材料没有任何好处(你在其中做任何事情都会遇到英语单词,在这种情况下,字面意义对于理解技术意义几乎没有用处),它只会损害对外语材料的理解(这是大部分有价值的材料,除非你的母语是英语)。