2013-10-09 21 views
0

为什么CPU寄存器像垃圾收集器的根一样行事?当一个增变器暂停时,所以垃圾收集器可以扫描根,变量内容被刷新到内存(使用内存栏),所以寄存器不包含内存中没有的数据...如果我的理解是正确的...为什么CPU寄存器像Garbage Collector的根一样行事?

为什么你需要扫描它们?我认为这是冗余...

+1

标准C++没有垃圾回收。你在问一个特定的语言扩展,或者一个不同的语言吗? –

+0

C++和垃圾收集在一起......虽然有C++垃圾收集器,但没有标准收集器。你将不得不通过加入你正在谈论的垃圾回收器来使这个问题更加详细。 –

+0

据我所知,根是堆栈中的变量和GC的一般上下文中的全局变量。 –

回答

0

内存刷新是一个实现细节。重要的是,启动GC周期时寄存器中包含的数据被视为可访问,无论数据在GC周期本身存储在内存中的方式或位置。

+0

我的问题是:如果我保证所有的mutators都暂停,并且它们(mutators)在暂停之前调用了'std :: atomic_thread_fence' ...在std :: atomic_thread_fence之后所有的寄存器值都被刷新到了内存中?所以,如果所有内容都被刷新到内存中(并假定程序员不会自己更改寄存器值),为什么在扫描根目录时需要读取寄存器? –

+1

@DaniloCarvalho不,你不能保证所有的寄存器都被刷新到内存中,这只是因为一致性实现允许只有只写寄存器的变量(是的,甚至是指向对象的指针)永远不会写入内存。 – syam

+0

但是,如果我在这些变量上使用&运算符,那么我会强制它们不能仅注册。对? –

相关问题