【问题标题】:Garbage collector that would work outside my app?可以在我的应用程序之外工作的垃圾收集器?
【发布时间】:2010-12-08 06:16:37
【问题描述】:

所以我正在寻找可以在一些抽象 C++ 线程/进程上进行垃圾收集的开源、跨平台(至少是 win、lin)库......所以可以说是应用程序内存管理的单独进程......或者在至少会给我一些功能,用于查看我的过程中未使用的内存删除...有没有这样的功能? boost 可以帮我解决这个问题吗?

我的主要目的是找到这样的垃圾收集器,它能够在我的普通 c++ 代码之上运行/..我的意思是没有特殊的内存分配,也没有在主程序代码中特别使用它......可能只是以某种方式连接到我的进程并监控它......所以我对这样的 gc 很感兴趣,它可以在进程之上工作并清理所以说小心旧的未使用的内存块......

所以让我更详细地描述一下问题:我的代码可以正常工作,并且通常可以自行管理。但有时它只是将一些 2-3 mbs 放入 ram 中,而不是永远使用 tham - 我知道它没有 - 毕竟我编写了代码......所以这就是为什么我需要一些在我的应用 gc 之上。 ..

【问题讨论】:

  • 为什么需要垃圾收集器?虽然 C++ 有垃圾收集器,但大多数 C++ 代码都是在假设没有垃圾收集的情况下编写的。不会有用于 C++ 的垃圾收集器,您可以将其放入 C++ 代码中并期望它开箱即用。
  • 另外,这个问题可能与Garbage collectors for C++ 重复。
  • @In Silico:OP 要求它在任意线程或进程上运行是一件大事。这不是骗子。
  • @DeadMG:糟糕,我错过了。
  • 在我看来,智能指针只是细粒度的垃圾收集(这是确定性的)。

标签: c++ garbage-collection


【解决方案1】:

我认为你的时间最好花在修复内存泄漏上。这可能是其他更严重的错误的症状。

【讨论】:

    【解决方案2】:

    我从未听说过或见过在进程或线程级别而不是在源代码级别插入的内存管理系统。如果没有源,您将永远无法获得足够的程序信息来查看仍然引用了哪些内存以及哪些字节集合恰好看起来像指向该地址的指针。

    【讨论】:

    【解决方案3】:

    您可以尝试 Boehm 的保守标记垃圾收集器:

    http://www.hpl.hp.com/personal/Hans_Boehm/gc/

    我自己从未使用过它,但如果您可以让您的目标线程/进程链接到它的 alloc 函数和一个无所事事的免费函数,那么您可能会有机会。动态链接的细节当然是平台特定的。

    请注意,它不会仅仅落在所有 C++ 代码之上。如果你有析构函数除了空闲内存之外做任何其他事情,那么我怀疑你会遇到困难,因为虽然 GC 支持终结器,但(a)终结与销毁从根本上不同,因为它不会立即运行(b) 无论如何它都需要更改源代码。

    修复 C++ 代码中的内存泄漏可能会更好;-p 大多数 C++ 库等都是在假设您将使用典型的 C++ 技术进行资源管理的前提下编写的,它们不一定能很好地与 GC 配合使用。

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 2011-10-22
      • 1970-01-01
      • 2015-04-30
      相关资源
      最近更新 更多