34 lines
917 B
JavaScript
34 lines
917 B
JavaScript
/* globals stackPointerInfo */
|
|
|
|
var stackBottom = stackPointerInfo();
|
|
var stackTop = stackBottom;
|
|
|
|
function nearNativeStackLimit() {
|
|
function inner() {
|
|
try {
|
|
stackTop = stackPointerInfo();
|
|
// eslint-disable-next-line no-eval
|
|
var stepsFromLimit = eval("inner()"); // Use eval to force a number of native stackframes to be created.
|
|
return stepsFromLimit + 1;
|
|
} catch (e) {
|
|
// It would be nice to check here that the exception is actually an
|
|
// over-recursion here. But doing so would require toString()ing the
|
|
// exception, which we may not have the stack space to do.
|
|
return 1;
|
|
}
|
|
}
|
|
return inner();
|
|
}
|
|
|
|
var nbFrames = nearNativeStackLimit();
|
|
var frameSize = stackBottom - stackTop;
|
|
print(
|
|
"Max stack size:",
|
|
frameSize,
|
|
"bytes",
|
|
"\nMaximum number of frames:",
|
|
nbFrames,
|
|
"\nAverage frame size:",
|
|
Math.ceil(frameSize / nbFrames),
|
|
"bytes"
|
|
);
|