【发布时间】:2013-10-09 14:47:44
【问题描述】:
为什么 CPU 寄存器充当垃圾收集器的根?当 mutator 暂停时,垃圾收集器可以扫描根,变量内容被刷新到内存(使用内存栅栏),因此寄存器不包含不在内存中的数据......如果我的理解是正确的......
那你为什么需要扫描它们呢?我认为这是冗余......
【问题讨论】:
-
标准 C++ 没有垃圾收集。您是在询问特定的语言扩展,还是不同的语言?
-
C++ 和垃圾收集在一起......虽然有 C++ 的垃圾收集器,但没有标准的。您必须通过包括您正在谈论的垃圾收集器来使这个问题更加详细。
-
据我所知,根是堆栈中的变量和GC一般上下文中的全局变量。
-
cpu 寄存器究竟如何成为任何东西的“根”?据我所知,在汇编级别的 CPU 根本无法按照您描述的方式工作。这部分尤其对我没有任何意义任何“变量内容被刷新到内存(使用内存栅栏),因此寄存器不包含不在内存中的数据”寄存器与内存无关,GC不会在寄存器级别操作,而且变量已经在内存中,所以你不能在那里刷新它们。
-
@DaniloCarvalho:“最终寄存器值将被写入内存” 这不是真的,也不能保证。变量可以完全转换为寄存器。值可能永远不会写入内存。地址(存储在寄存器中)可能会被重用。即使在外部函数调用之后,寄存器值也可能保持不变。如果你想写一个 GC,我建议你在比 CPU 更高的级别上操作。 AFAIK,CPU 寄存器是多用途的,不只是存储计算的“中间结果”。
标签: c++ garbage-collection memory-fences