【问题标题】:JavaScript is not allocating needed size for ArrayBufferJavaScript 没有为 ArrayBuffer 分配所需的大小
【发布时间】:2016-11-23 21:09:06
【问题描述】:

我试图运行这段代码来分配一个 ArrayBuffer:

var data = new ArrayBuffer(336000000);
console.log(data.byteLength); // outputs 125829120

有谁知道为什么没有分配字节数? Chrome 不会给我任何错误/警告。

这个问题不是在每个平台上都有,而是在 Galaxy S6(Android 浏览器)上的几个平台上

【问题讨论】:

  • 这是 336 兆字节。也许您只能访问 125 兆字节的内存?
  • 它输出 336000000 对我来说很好。我把它放在 Chrome 的控制台中。
  • @NeilDocherty 不会依赖于可用资源吗?我希望您在计算机上使用的内存比 S6 更多。
  • @Kris,你的权利。我什至没有注册他写道他在移动设备上。
  • 有趣的是,Firefox 也是这样做的。不是这个数量,但如果我尝试分配 3GB,它只会给我 1GB。会期望一个例外而不是这个。

标签: javascript memory arraybuffer


【解决方案1】:

您正在尝试分配比可用内存更多的内存。但是,根据规范,这应该引发异常,而不是返回更小的缓冲区:

http://www.ecma-international.org/ecma-262/6.0/#sec-createbytedatablock

令 db 为由 size 个字节组成的新数据块值。如果无法创建这样的数据块,则抛出 RangeError 异常。

还有之前的规范https://www.khronos.org/registry/typedarray/specs/latest/#5

如果无法分配请求的字节数,则会引发异常

因此,如果您的浏览器返回较小的缓冲区而不是抛出异常,则它是不合规的。

【讨论】:

  • 查看developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 中的兼容性数组。我认为关于“新投掷”这一行的问号是相关的。
  • @Barmar 我读到的就是你应该使用new ArrayBuffer(x) 而不仅仅是ArrayBuffer(x),并质疑浏览器是否允许非new 版本或抛出一个例外,即与尺寸问题无关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 2017-01-22
  • 2020-04-20
  • 2021-12-08
相关资源
最近更新 更多