WebAssembly.memory
WebAssembly.memory
这是一项
实验技术
在使用此产品之前,请仔细检查浏览器兼容性表。
该WebAssembly.Memory()
构造函数创建一个新Memory
对象,它是一个可调整大小的ArrayBuffer保持的存储器由Instance
WebAssembly访问的原始字节。
由JavaScript或WebAssembly代码创建的内存将可从JavaScript和WebAssembly访问和修改。
语法
var myMemory = new WebAssembly.Memory(memoryDescriptor
参数
_memoryDescriptor_可包含以下成员的对象:_initial_ WebAssembly内存的初始大小,以WebAssembly页面为单位._maximum
可选_允许WebAssembly内存允许增长的最大大小(以WebAssembly页为单位)。当存在时,该maximum
参数起到提示引擎预先存储内存的作用。但是,引擎可能会忽略或限制此预留请求。一般来说,大多数WebAssembly模块不需要设置一个maximum
。
注
:WebAssembly页面的常量大小为65,536字节,即64KiB。
异常
- 如果
memoryDescriptor
不是类型对象,则抛出TypeError
。
- 如果
maximum
被指定并小于initial
,则抛出RangeError
。
Memory 实例
所有Memory
实例都继承于Memory()
构造函数的原型对象 - 可以修改它以影响所有Memory
实例。
Instance 属性
Memory.prototype.constructor
返回创建此对象实例的函数。默认情况下这是WebAssembly.Memory()
构造函数。Memory.prototype.buffer
访问器属性,返回内存中包含的缓冲区。
Instance 方法
Memory.prototype.grow()
通过指定数量的WebAssembly页面(每个页面大小为64KB)增加内存实例的大小。
示例
有两种方法来获得一个WebAssembly.Memory
对象。第一种方法是从JavaScript构建它。以下示例创建一个新的WebAssembly Memory实例,初始大小为10页(640KiB),最大大小为100页(6.4MiB)。
var memory = new WebAssembly.Memory{initial:10, maximum:100}
获取WebAssembly.Memory
对象的第二种方法是通过WebAssembly模块将其导出。以下示例(请参阅GitHub上的memory.html,也可以实时查看)使用我们的fetchAndInstantiate()
实用程序函数获取并实例化加载的memory.wasm字节代码。然后它从模块中导出一个内存,存储一些值,然后导出一个函数并使用它来求和一些值。
fetchAndInstantiate('memory.wasm').then(function(instance) {
var i32 = new Uint32Array(instance.exports.mem.buffer
for (var i = 0; i < 10; i++) {
i32[i] = i;
}
var sum = instance.exports.accumulate(0, 10
console.log(sum
}
规范
Specification | Status | Comment |
---|---|---|
Web Assembly JavaScript APIThe definition of 'Memory' in that specification. | Draft | Initial draft definition. |
浏览器兼容性
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | 57 | 16 | 522 | No | 44 | 11 |
buffer | 57 | 16 | 522 | No | 44 | 11 |
grow | 57 | 16 | 522 | No | 44 | 11 |
prototype | 57 | 16 | 522 | No | 44 | 11 |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
buffer | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
grow | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
prototype | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |