JS_malloc 与 malloc
JS_malloc 只用于为 Spidermonkey 中的 javascript 类型分配内存吗?
如果我需要为第三方数据类型(不是 JSObject 或类似的)分配内存,可以使用 malloc 吗?
JS_malloc 和 C malloc 有什么区别?
Is JS_malloc only used to allocate memory for javascript types in Spidermonkey?
If I need to allocate memory for a third-party datatype (not a JSObject or similar), is it ok to use malloc?
What are the differences between JS_malloc and C malloc?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
JS_malloc
之所以存在,是因为它保证使用与 Spidermonkey 本身相同的分配器,而该分配器可能与代码中的malloc
不同。特别是一些流行的操作系统(例如Windows)支持每个共享库具有单独分配器的单独堆;如果您动态链接到 Spidermonkey,然后在内存上调用 Spidermonkey 的free
,则代码中的malloc
将会崩溃。因此,如果您要自己释放对象,可以使用
malloc
/free
或JS_malloc
/JS_free
只要你保持一致。使用哪一个并不重要,除非您对希望其驻留在哪个 DLL 堆中具有特定要求(例如,您计划在其中一些对象处于活动状态时在某个时刻卸载 Spidermonkey DLL)。如果您正在进行分配,但希望 Spidermonkey 进行释放,则需要使用 JS_malloc。
JS_malloc
is just there because it is guaranteed to use the same allocator as the Spidermonkey itself does, which may not be the same allocator asmalloc
in your code. In particular some popular OSes (e.g. Windows) support separate heaps with separate allocators per shared library; if you're dynamically linking to Spidermonkey then calling Spidermonkey'sfree
on memory youmalloc
in your code would crash.So if you're going to deallocate the object yourself, you can use either
malloc
/free
orJS_malloc
/JS_free
as long as you're consistent. It doesn't matter much which one you use, unless you have specific requirements on which DLL's heap you want it to live in (e.g. you plan to unload the Spidermonkey DLL at some point while some of these objects are live).If you're doing the allocation but expect Spidermonkey to do the deallocation, you need to use
JS_malloc
.另外,如果 JS_malloc() 失败,它会调用 JS_ReportOutOfMemory(cx) 或类似的函数,可供错误报告器等使用。
Also, if JS_malloc() fails, it calls JS_ReportOutOfMemory(cx) or similar, which can be used by error reporters etc.