Ответ 1
Очевидно, это переменная. Поскольку все расчеты, которые вы действительно делаете, расположены в стеке (коды отчетов о разборке показывают инструкции pushbyte
и другие материалы, которые работают со стеклом, как арифметика без операнда), это значение только сообщает, сколько контекстов функций может быть помещено в стек до он переполняется.
Я решил запустить некоторые тесты для порогов рекурсии, основанные на этой статье, на которые ссылался бариз. Результаты были довольно смущающими. Тестовая среда: FlashDevelop 3.3.4 RTM, отладчик Flash-плеера 10.1.53.64, режим компиляции вспышки: выпуск. Режим "Отладка" не изменил числа кардинально, тоже проверил.
Locals number Iterations (static int) Iterations (Math.random())
0 5306
1 4864 4856
2 4850 4471
3 4474 4149
4 4153 3870
5 3871 3868
6 3869 3621
7 3620 3404
8 3403 3217
9 3210 3214
10 3214 3042
11 3042 3045
10 mixed 3042 1 value was assigned Math.random() and 9 - static int
10 advancedRandom 2890 1 value was assigned a custom random with 1 parameter
Примечание. Все эти значения варьируются в пределах десяти раз между последующими исполнениями. "Static int" и "Math.random()" являются обозначениями того, что назначено локалям с рекурсивно называемой функцией. Это, однако, заставляет меня предположить следующее:
- Включение вызовов функций в рекурсивную функцию добавляет в контекст функции
- Память для локальных жителей назначается вместе с ее типом, в кусках более 8 байтов, поскольку добавление локального не всегда уменьшает предел рекурсии
- Добавление нескольких вызовов к определенной функции не добавляет больше памяти в контекст функции
- "Хранение памяти", скорее всего, 16 байтов, потому что это значение равно 2 ^ N, добавление одного int или Number local не всегда уменьшает рекурсию, и это больше, чем 8, в качестве необработанного значения Числовая переменная принимает 8 байтов, являясь плавающей точкой с двойной точностью.
- Предполагая # 4 правильно, лучшее значение для размера контекста функции оказалось равным 172 байтам, общий размер стека составил 912632 байта. Это в значительной степени подтверждает мое первоначальное предположение о том, что размер стека на самом деле составляет 1 мегабайт во Flash 10. Flash 11 показал мне немного больше чисел, когда я попытался открыть тестовый SWF в своем отладчике, но я не проводил с ним больших испытаний.