2016-11-23 33 views
3

分配所需的大小我试图运行该代码分配一个ArrayBuffer:JavaScript是不是ArrayBuffer

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

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

这个问题是不是每个平台上,但在几个像银河S6(Android浏览器)

+1

这就是336兆字节。也许你只能访问125兆字节的内存? – Kris

+0

它输出'336000000'就好了。我把它放在Chrome上的控制台上。 –

+0

@NeilDocherty不会依赖于可用的资源吗?我希望你有更多的内存可以通过S6在你的电脑上使用。 – Kris

回答

3

你试图分配更多的内存比可用。然而,根据规范,这应该抛出一个异常,而不是返回你一个较小的缓冲区:

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

让DB是由大小字节的新的数据块的价值。如果不可能创建这样的数据块,则引发RangeError异常。

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

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

所以,如果您的浏览器返回一个较小的缓冲区而不是抛出例外,它不符合规定。

+0

查看https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer。我认为关于“新投”的问题是相关的。 – Barmar

+0

@Barmar我的阅读是,这只是关于你应该使用'new ArrayBuffer(x)'而不是'ArrayBuffer(x)'的事实,并质疑浏览器是否允许非'new'版本或抛出一个例外,即与尺寸问题无关 – CupawnTae