gpt4 book ai didi

c++ - 玩具垃圾收集 : Is operator new/delete enough?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:32 25 4
gpt4 key购买 nike

我正在研究我的一个学习项目(使用 C 语言),并考虑将其迁移到 C++ 以获得额外的学习点。它的一部分涉及针对特定对象系列的垃圾收集系统,在 C 中,我通常会使用大型 malloc/mmap 并使用简单的天真标记和清除(我可以识别引用和类似的东西)已经)。

我的问题是我正在考虑将这个想法转移到 C++,但我对我对其内存管理方案的理解不够安全。

到目前为止,我考虑分配一个大内存池并在基类上重载运算符 new 和 delete 以调用我的内存池的抓取/释放函数,然后让垃圾收集器的清理阶段删除它看到的对象。够了吗?我在这里没有看到的隐藏陷阱是什么?

编辑:澄清一下,我已经能够计算出分配对象的生命周期,因此无需使用 gc abi。这些对象很少会被 C++ 代码操作,使用它们的代码能够通知 gc 它们正在被使用,而无需检查堆栈。

最佳答案

如果您要更改类,为什么不让它们从新的基类继承,该基类在构造期间注册到 GC 并在销毁期间注销。经理类将做簿记。基类可以是模板:

template <class parent> class BASE_GC {
BASE_GC() { /* register address and name*/}
~BASE_GC() { /* unregister*/}
};

父类名可以从typeid(*this).name()派生。由于基类名称包含父类名称。

关于c++ - 玩具垃圾收集 : Is operator new/delete enough?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19993096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com