首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WebAssembly.memory

这是一项 实验技术

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

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

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

语法

代码语言:javascript
复制
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)。

代码语言:javascript
复制
var memory = new WebAssembly.Memory({initial:10, maximum:100});

获取WebAssembly.Memory对象的第二种方法是通过WebAssembly模块将其导出。以下示例(请参阅GitHub上的memory.html,也可以实时查看)使用我们的fetchAndInstantiate()实用程序函数获取并实例化加载的memory.wasm字节代码。然后它从模块中导出一个内存,存储一些值,然后导出一个函数并使用它来求和一些值。

代码语言:javascript
复制
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

扫码关注腾讯云开发者

领取腾讯云代金券