在线文档教程

WebAssembly.memory

WebAssembly.memory

这是一项 实验技术

在使用此产品之前,请仔细检查浏览器兼容性表。

WebAssembly.Memory()构造函数创建一个新Memory对象,它是一个可调整大小的ArrayBuffer保持的存储器由InstanceWebAssembly访问的原始字节。

由JavaScript或WebAssembly代码创建的内存将可从JavaScript和WebAssembly访问和修改。

语法

var myMemory = new WebAssembly.Memory(memoryDescriptor

参数

_memoryDe​​scriptor_可包含以下成员的对象:_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 }

规范

SpecificationStatusComment
Web Assembly JavaScript APIThe definition of 'Memory' in that specification.DraftInitial draft definition.

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support5716522No4411
buffer5716522No4411
grow5716522No4411
prototype5716522No4411

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support5757(Yes)1522No?11
buffer5757(Yes)1522No?11
grow5757(Yes)1522No?11
prototype5757(Yes)1522No?11