JavaScript 没有为 ArrayBuffer 分配所需的大小

标签 javascript memory arraybuffer

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

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

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

这个问题不是在每个平台上都有,而是在一些平台上,比如 Galaxy S6(Android 浏览器)

最佳答案

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

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

Let db be a new Data Block value consisting of size bytes. If it is impossible to create such a Data Block, throw a RangeError exception.

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

If the requested number of bytes could not be allocated an exception is raised

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

关于JavaScript 没有为 ArrayBuffer 分配所需的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40774189/

相关文章:

javascript - Jquery脚本删除表单集合中的所有项目

javascript - ExtJS 如何制作包装其元素的工具栏?

javascript - 对“选择”中的项目进行排序并记住所选内容

c++ - 动态 vector 的特征库内存使用

c++ - 使用 emscripten 如何将 C++ uint8_t 数组获取到 JS Blob 或 UInt8Array

javascript - 追加 ArrayBuffer

javascript - 通过 esc 键或单击外部检测 jquery 显示插件模式

java - 将 Java 对象实例化为传递的对象引用

c++ - 计算 Linux 上一组进程使用的内存

javascript - 如何在 JS 中从 ArrayBuffer 写入文件