繁体   English   中英

Javascript数组的内存分配?

[英]Memory allocation of a Javascript array?

如果我向Javascript数组的第1000个元素添加一个值,那么假设这些位置是开放的,那么将该值添加到第0个元素有什么区别吗?

我说的是内存消耗。

例:

arr[1000] = 'asdf';

arr[0] = 'asdf';

由于JavaScript数组实际上是对象,因此内存不是连续的。 因此,以您的示例为例,访问array[1000]而不存储任何其他内容将占用与您存储的内容相同的内存量(而不是1000 *值的大小)。

实际上,执行var arr = new Array(1000); 每个Danny的答案不会创建1000个空插槽的数组。 它创建一个length值为1000的数组。

这样考虑:如果JavaScript不知道要存储的内容的类型和大小,那么它如何知道要留出多少内存呢?

例如:

var arr = [];
arr[1000] = 'String value';

怎么说我不能在另一个索引中存储整数?

arr[0] = 2;

资料来源: https : //stackoverflow.com/a/20323491/2506594

如果您有一个大小为1000的数组,那么您将占用1000个内存插槽。

var arr = new Array(1000);

对于数组查找 ,时间复杂度仍然是恒定的 ,因此不会降低应用程序的速度。

但是,您明确要求在内存中有1000个插槽,因此它仍然是一个很大的空间。 尽管作为硬件的内存便宜,但您仍应尽可能保持阵列大小动态变化,以防止程序占用不必要的内存空间。

本身,JavaScript对象实际上并没有排序 无论它们是数组还是对象,键的顺序都不重要。 一个实现可以将它们按所需的顺序放置。 当然,你必须将它们存储在某种秩序,所以大多数的实现让他们在你插入他们的顺序但这仅仅是一个巧合:规格没有要求它,所以你不能指望它总是真实的。

因此, arr[1000]不一定是数组的第1000个元素:它只是一个成员,其键恰好是1000 如果您在其之前插入了999个元素, 并且运行时将其按插入顺序排列,则可能确实是第1000个元素。 但这就像42元素一样容易。 根据运行时的实现和您自己的代码,它甚至可能是第一个元素。

而且由于数组没有顺序,因此假设没有设置其他内容, 分配给arr [1000]不会比分配给arr [0]占用更多的内存 如果您已经设置了999个元素,那么显然设置arr [1000]将导致该数组比以前占用更多的空间,因为您必须将该元素存储在某个地方。 但是它并不会因为其密钥为1000而占用任何额外的空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM