【发布时间】:2017-12-05 19:21:59
【问题描述】:
我想更详细地了解最大堆栈帧/大小。
function computeMaxCallStackFrames() {
try {
//
// <Variable part here>
//
return 1 + computeMaxCallStackFrames();
} catch (e) {
// Call stack overflow
return 1;
}
}
computeMaxCallStackFrames() // 5447 on Chrome 58.0.3029.110, Mac 10.11
将// <Variable part here> 更改为:
测试用例 1:
var a = 1;
// computeMaxCallStackFrames() => 5220
测试用例 2:
var a = 1;
var b = 2;
// computeMaxCallStackFrames() => 5011
测试用例 3:
var a = 1;
var b = {};
// computeMaxCallStackFrames() => 5011 (no change from `var b = 2;`)
测试用例 4:
var a = 1;
var b = {c: 3};
// computeMaxCallStackFrames() => 5010
我的问题是为什么 Test case 4 会发生变化,以及为什么它会减少 1 个堆栈帧。
** 编辑 ** 任何指向 v8 源代码的相关链接都很棒。即使只是显示设置堆栈大小内存限制的位置也是很好的介绍。很抱歉,当 Andreas Rossberg 和 jmrk 已经分别留下了他们很好的答案和 cmets 时,没有问这个问题。
【问题讨论】:
标签: javascript v8 callstack stack-frame