JS_malloc 是否仅用于为 Spidermonkey 中的 javascript 类型分配内存?
如果我需要为第三方数据类型(不是 JSObject 或类似的)分配内存,可以使用 malloc 吗?
JS_malloc 和 C malloc 有什么区别?
JS_malloc 是否仅用于为 Spidermonkey 中的 javascript 类型分配内存?
如果我需要为第三方数据类型(不是 JSObject 或类似的)分配内存,可以使用 malloc 吗?
JS_malloc 和 C malloc 有什么区别?
JS_malloc
之所以存在,是因为它保证使用与 Spidermonkey 本身相同的分配器,这可能与malloc
您的代码中的分配器不同。特别是一些流行的操作系统(例如 Windows)支持单独的堆,每个共享库都有单独的分配器;如果你动态链接到 Spidermonkey,那么在你的代码中调用 Spidermonkey's free
on memorymalloc
将会崩溃。
因此,如果您要自己解除分配对象,则可以使用malloc
/free
或JS_malloc
/JS_free
只要您保持一致即可。使用哪一个无关紧要,除非您对希望它驻留在哪个 DLL 堆中有特定要求(例如,您计划在其中一些对象处于活动状态时卸载 Spidermonkey DLL)。
如果您正在执行分配但希望 Spidermonkey 执行解除分配,则需要使用JS_malloc
.
此外,如果 JS_malloc() 失败,它会调用 JS_ReportOutOfMemory(cx) 或类似的方法,可供错误报告者等使用。