【发布时间】:2018-04-27 20:55:06
【问题描述】:
假设会生成一个包含大量数据的 WebAssembly 模块(wat 格式)。一旦程序开始运行,数据将在运行时动态更改和更改。不太确定我是否理解将这些数据放在生成的 WebAssembly 模块中的什么位置。
我正在尝试完成(在 WebAssembly 中)这个 JavaScript 所展示的内容:
var data = [
100.1, 100.2, 200.1, 200.2,
300.12, 300.123, ...
]
我最终会做这样的事情:
var subset = data.slice(2, 4)
storeSubset(subset)
data[5] = 500.3
subset[2] = 600
...但在 WebAssembly 中不是 JavaScript,其中 data 和 subset 是某些函数的局部变量;它们不是全局变量。虽然如果有必要,可能有一个全球数据集。
想知道在生成的模块中放置数据的位置。所以程序将从一开始就将这些数据内置。基本上,有一些初始化数据会在运行时动态修改。
这就是我试图用伪代码完成的:
(module
(load float16 memorylocation, 200.1)
(load float16 memorylocation, 200.2)
... for every piece of data
)
不确定 (a) 是否应该与此类似(一次一件),或者 (b) 是否可以以某种方式批量完成。像这样:
(module
(static memorylocation, 0101010110101...) ;; the bytes of all the `data`
(block (loop ...)) ;; loop through it and do `(load ...)` for each,
;; not sure if that would be better / performance / etc.
...
)
将所有字节加载到一个位置并循环遍历它们?
或者也许有一种更标准的.data 功能,比如汇编(虽然我不确定这是否适合动态数据)。
(module
(data float16 memorylocation, 200.1)
(data float16 memorylocation, 200.2)
...
)
到目前为止,我了解如何在 WebAssembly 中执行 functions,只是不了解如何处理初始化数据,因为它似乎会生成大量的 WebAssembly,并且不确定应该是哪种 WebAssembly。
【问题讨论】:
-
你用什么来生成你的代码?大概是C++代码吧?
-
当然可以说它是 C++。但我想知道
wat的外观。
标签: webassembly