我们正在编写一个基于 Webkit 的具有 C 后端的软件框架。我们希望将 C 层的引用传递到顶部的 javascript 层。不幸的是,C 指针可能高达 64 位,而 javascript 只支持高达 56 位。
我们如何克服这个 javascript 限制?
我们目前的方法是在 C 中在 64 位指针和 32 位整数之间创建一个哈希映射。后者被传递到 Javascript 层。
我们正在编写一个基于 Webkit 的具有 C 后端的软件框架。我们希望将 C 层的引用传递到顶部的 javascript 层。不幸的是,C 指针可能高达 64 位,而 javascript 只支持高达 56 位。
我们如何克服这个 javascript 限制?
我们目前的方法是在 C 中在 64 位指针和 32 位整数之间创建一个哈希映射。后者被传递到 Javascript 层。
您可以简单地将指针转换为 C 端的双精度数(请参阅此相关问题),并仅与 JavaScript 进行双精度数通信。这种方式不会有任何损失,因为您只会处理两侧可能值相同的 IEEE754 双精度数。
但是经验表明,在程序之间交换指针通常不是一个好主意(显然它首先引入了强耦合),所以我会使用某种 ID,这就是你对 hashmap 所做的。
x64 上的 64 位指针只使用低 48 位,实际上 spidermonkey 和其他浏览器依靠它通过 NaN-boxing 快速整数/双精度表示。