是否可以在不分配内存的情况下存储值

Can values be stored without allocating memory?

本文关键字:情况下 存储 内存 分配 是否      更新时间:2023-09-26

我一直在看这里

https://developer.mozilla.org/en-US/docs/JavaScript/Memory_Management Allocation_via_function_calls

和这些行让我有点困惑:

var s = "azerty";
var s2 = s.substr(0, 3); // s2 is a new string
// Since strings are immutable value, JavaScript may decide 
// to not allocate memory, but just store the [0, 3] range.

所以评论说,JavaScript可能决定不分配内存,只是存储范围[0,3],现在不需要分配内存之前存储?如果没有,正如注释所暗示的那样,究竟发生了什么,使得存储的范围存储在空闲空间中,而没有被其他值占用。

注释意味着s2不必专门为"aze"这三个字符分配内存。相反,它可以使用s已经为"azerty"分配的内存,并且记住它自己的长度只有三个字符。

不可变部分也很重要:如果s不是不可变的,那么它可以在不告诉任何人的情况下决定将其值从"azerty"更改为"foobar",从而间接地将s2的值更改为"foo"——这将是灾难性的。

当然,这并不意味着不分配任何内存;我们仍然需要分配内存来存储可以找到字符串内容的位置,以及字符串的长度。

注释讨论的是为字符串的字符数据分配空间。

当你创建一个新变量时,它自然要为它分配空间,但这并不一定是堆上的新对象,它可以是预分配的变量数组中的一个项。

让两个变量指向相同的字符数据的好处是,即使子字符串的长度很长,获取子字符串也只占用很少的内存,缺点是,只要使用了原始字符串中的任何子字符串,原始字符串就会保留在内存中。

相关文章: