【发布时间】:2021-12-20 19:08:41
【问题描述】:
有许多用于 C++ 的垃圾回收库。
我有点困惑指针跟踪的工作原理。
特别是,假设我们有一个基指针 P 和一个其他指针列表,这些指针使用数组计算为 P 的偏移量。
前,
P2 = P+偏移量[0]
垃圾收集器如何知道 P2 仍在作用域内?它没有直接引用,但仍然可以访问。
可能最流行的 C++ gc 是
https://en.m.wikipedia.org/wiki/Boehm_garbage_collector
但是按照他们的示例语法,它似乎很容易被破解,所以我一定不明白。
【问题讨论】:
-
为什么你认为它不知道
P和P2是同一个对象? -
请添加具体库和minimal reproducible example
-
数组中的每一项都可以是 shared_ptr 或类似的,数组内存本身是私有的,不能直接访问。 P[offset[0]] 将返回 shared_ptr。
-
垃圾收集器知道每个对象(包括数组)的大小。就 GC 而言,指向对象内任何地址的指针都是指向该对象的指针。
标签: c++ memory-management garbage-collection heap-memory