【问题标题】:In WebAssembly what is the rationale for having both 32- and 64-bit numbers?在 WebAssembly 中同时拥有 32 位和 64 位数字的基本原理是什么?
【发布时间】:2020-02-23 00:30:43
【问题描述】:

WebAssembly 只有四种值类型:

  • i32 – 32 位整数
  • f32 – 32 位浮点数
  • i64 – 64 位整数
  • f64 – 64 位浮点数

每个都有自己的一组表示算术运算的操作码,例如i32.addi64.addf32.addf64.add。还有一些操作码可以将更窄的整数包装成更宽的类型,例如int32.store_8int64.load32_u。 WebAssembly v1 定义了约 170 个操作码,其中约 70 个专门用于 32 位数字,约 75 个用于 64 位。

在我看来,放弃对 32 位数字的支持将使操作码的数量几乎减半,而不会损失任何功能。这让我想知道:两者兼有有什么好处?

在 GitHub 上有 some discussions ,但它们对我来说有点太技术性了。

【问题讨论】:

  • 32 位数字占用 64 位数字空间的一半。底层平台也可能具有效率更高的 32 位指令。

标签: 32bit-64bit webassembly


【解决方案1】:

它们存在的原因与许多编程语言支持不同精度的数字的原因大致相同 - 较低精度的数字需要较少的存储空间,并且应用于这些数字的操作可能比较高精度的数字更快。

此外,按照建议减少 WebAssembly 中的操作码数量不会产生任何切实的好处。它们总是使用单个字节进行存储。

【讨论】:

    【解决方案2】:

    WebAssembly 的目标之一是在广泛使用的现代处理器(包括嵌入式系统)上高效运行,这些处理器都支持 32 位操作。

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 2014-02-05
      • 2014-07-31
      • 2015-03-19
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2011-04-05
      相关资源
      最近更新 更多