Javascript ArrayBuffers是否具有最大长度?

Javascript ArrayBuffers是否具有最大长度?,javascript,filereader,arraybuffer,Javascript,Filereader,Arraybuffer,我有点困惑。ArrayBuffer是否为其分配新的内存区域? 如果是这样的话,那么安全的最大水滴大小是多少?我也在问自己同样的问题。缓冲区似乎受到可用系统内存和底层JavaScript引擎GC处理大量内存的能力的限制。通过在浏览器控制台中创建大型缓冲区,并在另一端监控浏览器的进程和总体内存占用,您可以轻松地为您的平台测试它 我刚刚在Chrome37上创建了大于512MB的缓冲区。不过,我有4GB的系统内存,因此在分配更多内存后,很明显会导致崩溃。我对寻找断点不感兴趣,因为我对高达100MB的分配

我有点困惑。ArrayBuffer是否为其分配新的内存区域?
如果是这样的话,那么安全的最大水滴大小是多少?

我也在问自己同样的问题。缓冲区似乎受到可用系统内存和底层JavaScript引擎GC处理大量内存的能力的限制。通过在浏览器控制台中创建大型缓冲区,并在另一端监控浏览器的进程和总体内存占用,您可以轻松地为您的平台测试它


我刚刚在Chrome37上创建了大于512MB的缓冲区。不过,我有4GB的系统内存,因此在分配更多内存后,很明显会导致崩溃。我对寻找断点不感兴趣,因为我对高达100MB的分配很满意,但您显然可以自己轻松测试它。

这只取决于您的系统,似乎没有限制

根据:

如果无法分配请求的字节数,则会出现异常 这是提高

放在上面的安全最大水滴大小是多少

似乎没有硬性的限制,只是你的平台施加了什么限制

然而,如果使用某种索引访问,索引不应大于,因为否则会发生有趣的错误


幸运的是,2^53-1字节大约为8 PB,所以除非你做了一些非常奇怪的事情,否则这不会成为一个问题。

这里有一个更新的答案,至少根据2019年7月的Mozilla的说法:

数组或ArrayBuffer的长度属性用表示 一个无符号32位整数,只能存储 范围从0到(2^32)-1

(来自)

截至2020-01-09的更多详细信息

Firefox似乎限制了底层缓冲区的大小(因此限制是字节数),而Chrome似乎限制了类型化数组中的元素数。而且,根据这篇链接,Firefox的限制似乎低于我发布的mozilla链接所说的

new ArrayBuffer(Math.pow(2, 32) - 1)

是一个“有效案例”,但在控制台(Firefox 72.0.1 64位,Windows 10上)运行时会抛出一个Range错误。

Mozilla倾向于增加>2Gb-
javascript.options.large_arraybuffers

这在默认情况下是错误的,但在Firefox 89中应该是正确的。我不确定我是否理解你为什么要问这个问题。你发现问题了吗?至于Blob大小限制,我找不到任何限制,因此我认为这可能取决于客户端计算机的内存和服务器的上载限制。是的,在一个基本测试中,a尝试分配一个像512MB这样的大缓冲区(I测试限制)在Firefox中,它刚刚崩溃。当我打开inspector窗格时,还尝试在chrome inspector和chrome崩溃中的一个手表变量上分配类似的内容。期望浏览器启动某种错误,如内存不足。我对使用文件读取器在客户机上处理大型文件感兴趣。目前,我可以通过将大文件(大图像)的读取分片到较小的缓冲区来避免崩溃。我没有发现任何关于标准限制的信息,所以我猜这取决于浏览器的判断以及用户可用的RAM。谢谢。现在,最好不要分配大的块,因为浏览器并没有进行任何检查。使用Blob.slice将工作分块。链接指向的文档不包含您引用的单词。你的意思是?@Daerdemandt我的链接指向规范的“最新”版本,所以我猜它只是在发展,但是的,你引用的句子听起来像是新改写的,与我答案中的句子相当。