JS_malloc 与 malloc

发布于 2024-11-09 06:39:43 字数 170 浏览 0 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

漆黑的白昼 2024-11-16 06:39:43

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

因此,如果您要自己释放对象,可以使用 malloc/freeJS_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 as malloc 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's free on memory you malloc in your code would crash.

So if you're going to deallocate the object yourself, you can use either malloc/free or JS_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.

梦在夏天 2024-11-16 06:39:43

另外,如果 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文