【发布时间】:2015-02-08 05:14:01
【问题描述】:
使用 蜘蛛猴 24、38、45
Spidermonkey documentation 说:“堆上的 GC 事物指针必须包装在 JS::Heap 中。唯一的例外是如果它们作为根添加到 JS_AddRoot() 函数或 JS::PersistentRooted 类中,但除非确实有必要,否则不要这样做。JS::Heap 指针也必须继续以正常方式进行跟踪,此处不做介绍。” p>
在这种情况下,追踪到底意味着什么?以下代码是否缺少某些内容?
struct Foo
{
Foo(JS::HandleObject bar) : _bar(bar) {} // Does that root bar?
~Foo() {_bar = nullptr;} // Does that release memory?
JS::Heap<JSObject*> _bar;
};
Foo *create(JSContext *jscontext, JSObject *parent)
{
JS::RootedObject bar(jscontext, JS_NewObject(jscontext, &SOME_CLASS, NULL, parent));
return new Foo(bar);
}
我需要添加“跟踪”吗?当 bar 对象存储在 Foo 中时,我是否需要 root bar 对象?我应该使用 JS_AddRoot() 函数来根栏而不是使用堆吗?
【问题讨论】:
标签: javascript memory-management garbage-collection spidermonkey