2011-05-25 43 views
2

JS_malloc是否僅用於爲Spidermonkey中的JavaScript類型分配內存?JS_malloc vs malloc

如果我需要爲第三方數據類型(不是JSObject或類似的)分配內存,可以使用malloc嗎?

JS_malloc和C malloc之間有什麼區別?

回答

1

JS_malloc就在那裏,因爲它是保證使用同一分配器的SpiderMonkey的本身並沒有,這可能是不一樣的分配在你的代碼malloc。特別是一些流行的操作系統(例如Windows)支持每個共享庫具有單獨的分配器的獨立堆;如果您動態鏈接到Spidermonkey,然後在內存中調用Spidermonkey的free,那麼代碼中的malloc會崩潰。

所以,如果你要自己解除分配對象,你可以使用malloc/free或只要你保持一致JS_malloc/JS_free。除非你有特定的要求,你希望它生活在哪個DLL的堆上(例如,你打算在某些點上卸載Spidermonkey DLL,而其中的一些對象是活的),這並不重要。

如果您正在進行分配但希望Spidermonkey執行重新分配,則需要使用JS_malloc

+0

在類的終結重新分配您的SpiderMonkey做釋放是什麼意思? – 2011-05-25 12:17:59

+0

@Mad,Spidermonkey在釋放實際的'free()'時調用它。例如,如果您打算分配Spidermonkey然後釋放自己的字符串內存,則應該使用'JS_malloc'。如果你自己編寫的代碼中發生了'free()'調用,那麼你就是正在執行釋放的代碼。 – 2011-05-25 15:05:16

+0

再次感謝男人。 – 2011-05-25 22:01:18

1

而且,如果JS_malloc()失敗,它會調用JS_ReportOutOfMemory(CX)或類似的,可以通過誤差記者等使用

+2

這應該不是答案。你應該發表評論。 – 2012-11-10 09:57:10