gpt4 book ai didi

Javascript:为什么最大堆栈大小似乎动态变化?

转载 作者:行者123 更新时间:2023-12-03 00:09:50 25 4
gpt4 key购买 nike

当我运行下面的函数时,我在不同的浏览器上得到不同的结果:

function maxCallStackSize0() {
try {
return 1 + maxCallStackSize0();
} catch (e) {
return 1;
}
}
maxCallStackSize0(); // Opera: 32354, Chrome: 12795

但这还不是全部。如果我手动运行多次,结果也会改变:

maxCallStackSize0(); // Opera: 34724
maxCallStackSize0(); // Opera: 33776
maxCallStackSize0(); // Opera: 34030

这是因为后台调用的其他函数占用了一些堆栈吗?

我还发现传递的参数越多,调用堆栈越小:

function maxCallStackSize3(s1, s2, s3, s4) {
try {
return 1 + maxCallStackSize3(s1, s2, s3, s4);
} catch (e) {
return 1;
}
}
maxCallStackSize3("hello", "how", "are", "you"); // Opera: 13979, Chrome: 6971

这是因为参数是调用堆栈的一部分,并且我传递的参数越多/越大,调用堆栈在溢出之前可以越短吗?

是否可以知道调用堆栈的最大大小(以字节为单位)?

谢谢

最佳答案

堆栈大小取决于多种因素。

首先,当你调用一个函数时,所有的参数和返回地址都会被压入堆栈。此外,您在函数中定义的所有局部变量都将位于堆栈上。

其次,栈的增长方向与堆相反。一个进程使用一个内存空间作为栈和堆。如果堆上有变量(例如,如果使用 new 实例化变量,它将在堆上创建,而不是在堆栈上)。堆上的内容越多,堆栈增长的空间就越少。

我不知道你的设置是什么样的,但是如果你的浏览器选项卡中运行着其他任何东西,那么它会干扰堆栈大小,因为它会占用一些空间。

关于Javascript:为什么最大堆栈大小似乎动态变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54790888/

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