我们正在编写一个基于Webkit的软件框架,它具有C-backend。我们希望将C层中的引用传递到顶部的javascript层。不幸的是,C指针可能高达64位,而javascript只支持高达56位。
我们如何克服这个javascript限制?
我们当前的方法是在64位指针和32位整数之间用C创建一个散列映射。后者被传递到Javascript层。
答案 0 :(得分:1)
您可以简单地将指针转换为C侧的双精度(请参阅this related question),并且只与双向通信。这种方式不会有任何损失,因为您只处理IEEE754双精度数,其可能的值都是相同的。
但经验表明,在程序之间交换指针通常是一个坏主意(显然它引入了一个强大的耦合,一开始),所以我会使用某种ID,这就是你做的使用您的hashmap。
答案 1 :(得分:1)
x64上的64位指针use only the lower 48 bits,实际上spidermonkey和其他浏览器依赖于此来通过NaN-boxing进行快速整数/双重表示。