2

JS_malloc 是否仅用于为 Spidermonkey 中的 javascript 类型分配内存?

如果我需要为第三方数据类型(不是 JSObject 或类似的)分配内存,可以使用 malloc 吗?

JS_malloc 和 C malloc 有什么区别?

4

2 回答 2

2

JS_malloc之所以存在,是因为它保证使用与 Spidermonkey 本身相同的分配器,这可能与malloc您的代码中的分配器不同。特别是一些流行的操作系统(例如 Windows)支持单独的堆,每个共享库都有单独的分配器;如果你动态链接到 Spidermonkey,那么在你的代码中调用 Spidermonkey's freeon memorymalloc将会崩溃。

因此,如果您要自己解除分配对象,则可以使用malloc/freeJS_malloc/JS_free只要您保持一致即可。使用哪一个无关紧要,除非您对希望它驻留在哪个 DLL 堆中有特定要求(例如,您计划在其中一些对象处于活动状态时卸载 Spidermonkey DLL)。

如果您正在执行分配但希望 Spidermonkey 执行解除分配,则需要使用JS_malloc.

于 2011-05-25T07:09:40.440 回答
1

此外,如果 JS_malloc() 失败,它会调用 JS_ReportOutOfMemory(cx) 或类似的方法,可供错误报告者等使用。

于 2011-10-04T01:24:03.423 回答