32bit-64bit - 在 WebAssembly 中同时拥有 32 位和 64 位数字的基本原理是什么?
问题描述
WebAssembly 只有四种值类型:
i32
– 32 位整数f32
– 32 位浮点数i64
– 64 位整数f64
– 64 位浮点数
每个都有自己的一组表示算术运算的操作码,例如i32.add
、和。还有一些操作码用于将较窄的整数包装成较宽的类型,例如. WebAssembly v1 定义了约 170 个操作码,其中约 70 个专门用于 32 位数字,约 75 个用于 64 位。i64.add
f32.add
f64.add
int32.store_8
int64.load32_u
在我看来,放弃对 32 位数字的支持将使操作码的数量几乎减半,而不会损失任何功能。这让我想知道:两者兼有有什么好处?
解决方案
它们存在的原因与许多编程语言支持不同精度的数字的原因大致相同 - 较低精度的数字需要更少的存储空间,并且应用于这些数字的操作可能比更高精度的数字更快。
此外,按照建议减少 WebAssembly 中的操作码数量不会产生任何切实的好处。他们总是使用单个字节进行存储。
推荐阅读
- c++ - c++:我可以给一个线程一个新值,而它仍在运行还是我必须先结束它?
- java - Gradle 没有在模拟器上构建应用程序
- api - docker-compose 中分离的前端和 php 后端的问题
- python - 如何在运行 PyQt 应用程序时捕获 main 中引发的异常?
- java - 将对象添加到列表
- c++ - 通过简单的动态链接来违反一个定义规则
- python - sqlalchemy.exc.ProgrammingError:(psycopg2.ProgrammingError)无法适应类型“系列”
- bots - 一个意图可以在 wit.ai 上拥有 50 种表达吗?
- matlab - 使用单元测试框架进行数据验证
- javascript - 通过 Javascript 附加/链接 HTML 文件