如何克服javascript的56位限制

时间:2013-07-17 11:27:54

标签: javascript c webkit

我们正在编写一个基于Webkit的软件框架,它具有C-backend。我们希望将C层中的引用传递到顶部的javascript层。不幸的是,C指针可能高达64位,而javascript只支持高达56位。

我们如何克服这个javascript限制?

我们当前的方法是在64位指针和32位整数之间用C创建一个散列映射。后者被传递到Javascript层。

2 个答案:

答案 0 :(得分:1)

您可以简单地将指针转换为C侧的双精度(请参阅this related question),并且只与双向通信。这种方式不会有任何损失,因为您只处理IEEE754双精度数,其可能的值都是相同的。

但经验表明,在程序之间交换指针通常是一个坏主意(显然它引入了一个强大的耦合,一开始),所以会使用某种ID,这就是你做的使用您的hashmap。

答案 1 :(得分:1)

x64上的64位指针use only the lower 48 bits,实际上spidermonkey和其他浏览器依赖于此来通过NaN-boxing进行快速整数/双重表示。