我们可以在C或C+中手动操作垃圾收集器吗+;? 我想知道我能不能看到C或C++中的垃圾回收器是如何工作的?

我们可以在C或C+中手动操作垃圾收集器吗+;? 我想知道我能不能看到C或C++中的垃圾回收器是如何工作的?,c++,c,memory,C++,C,Memory,选择内存中未使用的值的算法是什么 P>可以告诉我GC在C?< /p> < P> C和C++中没有垃圾收集的方式。< /P> < P>在任何一种语言中都没有垃圾收集器。至少,这不是标准兼容实现的一部分 注意到C++语言限制,使得实现垃圾收集变得困难。其中一些规则在最新的标准C++11中已经放宽。因此原则上,现在可以实现符合标准的C++垃圾回收器。 C++中的标准方法是用来自动管理内存。 有一个,包含一些有用的链接。从注释中,您可以看到GC与惯用的C++的匹配有多么困难。 < P>请检查本文/文

选择内存中未使用的值的算法是什么


<> P>可以告诉我GC在C?< /p> < P> C和C++中没有垃圾收集的方式。< /P> < P>在任何一种语言中都没有垃圾收集器。至少,这不是标准兼容实现的一部分

<>注意到C++语言限制,使得实现垃圾收集变得困难。其中一些规则在最新的标准C++11中已经放宽。因此原则上,现在可以实现符合标准的C++垃圾回收器。

C++中的标准方法是用来自动管理内存。


有一个,包含一些有用的链接。从注释中,您可以看到GC与惯用的C++的匹配有多么困难。

< P>请检查本文/文章:从Hans Boehm

< P>尽管标准C和C++中没有垃圾收集支持,但至少有一个流行的和漂亮的可移植实现称为.


保守的垃圾收集器的工作原理是假设所有看起来像指针的东西都是指针,即使它实际上是一个整数。因此,它们有时可能无法回收未引用的对象。此外,一些技巧(如xoring指针)可以对它们隐藏指针。但根据我的经验,它们在实践中似乎工作得相当好。

在C中,垃圾收集完全是手动的;您需要跟踪使用
malloc()
或相关函数分配的任何内容,以便在使用完
free()
后,可以使用
free()释放它,而这永远不会自动完成

C++基本相同;您需要
删除
任何分配给
新建的
(和
删除[]
任何分配给
新建[]
的数组)。然而,通过创建管理动态资源的对象,并在其析构函数中释放它们,这个过程可以(也应该)部分自动化。这种技术通常被称为,最常见的例子是来自标准库的容器和智能指针


这两种语言都没有自动垃圾收集,也没有任何方法来确定是否有任何动态对象正在使用;您始终需要自己管理动态资源。有一些提供垃圾收集的非标准扩展,但我对它们一无所知。

如果您使用自己的垃圾收集器,当然可以。如果你不知道,那么答案是否定的,因为没有SPO——我的意思是没有垃圾收集器。看看如果没有,那么为什么在某些情况下它会打印垃圾值?@l4zyw0rm我不确定你的意思,但一般来说,打印东西的能力和收集垃圾的能力是断开的。那么垃圾值呢?c有时打印垃圾值,这些值来自哪里?@l4zyw0rm它们可能来自任何地方。未初始化的变量,内存损坏。所以垃圾收集器不必对此做任何事情?是的,我正在搜索这个!!谢谢