JS_malloc是否仅用于为Spidermonkey中的javascript类型分配内存?
如果我需要为第三方数据类型(不是JSObject或类似数据类型)分配内存,是否可以使用malloc?
JS_malloc和C malloc之间有什么区别?
答案 0 :(得分:1)
JS_malloc
就在那里,因为它保证使用与Spidermonkey本身相同的分配器,这可能与代码中malloc
的分配器不同。特别是一些流行的操作系统(例如Windows)支持单独的堆,每个共享库具有单独的分配器;如果您动态链接到Spidermonkey,然后在内存中调用Spidermonkey的free
,代码中的malloc
将会崩溃。
因此,如果您要自行解除分配对象,只要您保持一致,就可以使用malloc
/ free
或JS_malloc
/ JS_free
。你使用哪一个并不重要,除非你对你希望它存在的DLL堆有特定的要求(例如你计划在某些时候卸载Spidermonkey DLL,而其中一些对象是实时的)。
如果您正在进行分配但希望Spidermonkey进行重新分配,则需要使用JS_malloc
。
答案 1 :(得分:1)
此外,如果JS_malloc()失败,它会调用JS_ReportOutOfMemory(cx)或类似的,可以由错误报告者等使用。