gpt4 book ai didi

JavaScript 和大字符串,JavaScript 使用写时复制吗?

转载 作者:行者123 更新时间:2023-11-28 01:27:43 27 4
gpt4 key购买 nike

我想知道(希望能确认)JavaScript 是否以写时复制的方式管理其变量。这很重要,因为我最终可能会处理可能很大的字符串,而且其中很多。

var a, b;

a = $(".foo").html();
b = a;

b深拷贝还是写时拷贝?我的代码将从写时复制中受益匪浅,因为在某些情况下我设置 b为不同的值(即,在大多数情况下,我复制 a ,在其他情况下,我设置为,例如 "on""off" 。但是,以后不会对其进行修改。)

最佳答案

JavaScript 字符串是否使用写时复制?不,因为您无法写入 JavaScript 字符串,所以它们是不可变的。

但是,是的,他们正在有效地利用这种优化。当您在示例中分配 b=a 时,b 将获取指向 a 所指向的同一存储的指针。 IE。非常快。如果您随后执行 b = b.replace('x','y') 操作,则会创建一个新字符串,并且 b 指向它,而 a 继续指向原始字符串。

请参阅《JavaScript 权威指南》中有关字符串的第 11.2.2 节。

顺便说一句,如果您真的感兴趣,这里是 V8 源代码:

https://github.com/v8/v8/blob/master/src/objects/string.h

https://github.com/v8/v8/blob/master/src/objects/string.cc

还有一点关于它为何如此复杂的解释(即大字符串有时存储为一堆小字符串,仅在必要时重新组装;似乎还有针对 ascii 字符串的优化)https://gist.github.com/mraleph/3397008

关于JavaScript 和大字符串,JavaScript 使用写时复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com