gpt4 book ai didi

javascript - 有没有办法使用 js-ctypes 自动管理 native 代码分配的内存?

转载 作者:太空宇宙 更新时间:2023-11-04 12:17:12 26 4
gpt4 key购买 nike

我继承了一个 Firefox 附加组件,它急需更新到新的 Firefox 4+ 系列。我终于有一些时间来处理它,但事实证明这个附加组件包含一个编译为 XPCOM 组件的 native 部分,现在强烈建议不要使用 XPCOM 组件。因为我真的不想在每次新的主要版本发布时都重新编译我的二进制文件,所以我正在考虑转向 js-ctypes。

由于二进制库确实非常小和简单,所以看起来并没有什么大不了的,但是有一件事让我很困扰:因为 XPCOM 对象(通常)是作为 C++ 对象实现的,所以它们有自动的析构函数每当 JavaScript 包装器对象被垃圾回收时调用。您不必在 JavaScript 代码中手动管理 native 资源。

理想情况下,我希望具有与 js-ctypes 等效的功能。由于 js-ctypes 比 XPCOM 更底层,它不直接支持对象,但我想知道是否有一种方法可以让我自己创建一个包装器对象,并以某种方式在它被垃圾收集时得到通知。我知道纯 JavaScript 没有析构函数的概念,但也许我仍然可以在 Firefox 中实现它。

最佳答案

不幸的是,这是 JavaScript 中的一个重要概念,您无法观察到垃圾回收(至少不能从 JavaScript 本身观察到)。唯一具有类似析构函数功能的地方是 XBL .换句话说,您可以定义一个 XUL 元素作为包装器对象(类似于 <stringbundle> 作为本地化 API 的包装器)。该元素的 XBL 绑定(bind)应提供必要的方法并在内部调用 js-ctypes。当元素被丢弃(XBL 析构函数运行)时,您可以清理并释放内存。

当然,这首先假设您可以使用 XUL 元素。如果您的代码不在窗口中运行,那么恕我直言,您就不走运了 - 它返回到手动对象跟踪以发现对象不再使用的时刻。

关于javascript - 有没有办法使用 js-ctypes 自动管理 native 代码分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7137315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com