Контр-пример на идею смотреть только на активный фрейм потока:
int foo(int n) {
int x;
if (n) {
foo(n - 1);
}
}
Рассмотрим момент foo(0), спросим про указатель на x (которая все еще жива) в момент вызова foo(n) — в текущем фрейме foo(0) мы ее не найдем.
Собрать статистику по тому насколько часто буду спрашивать указатель на переменную активного фрейма текущего потока, в зависимости от этого добавить эвристику "сначала проверить текущий активный фрейм, а потом уже все остальные" — идея хорошая.
Контр-пример на идею смотреть только на активный фрейм потока:
Рассмотрим момент
foo(0)
, спросим про указатель наx
(которая все еще жива) в момент вызоваfoo(n)
— в текущем фреймеfoo(0)
мы ее не найдем.Собрать статистику по тому насколько часто буду спрашивать указатель на переменную активного фрейма текущего потока, в зависимости от этого добавить эвристику "сначала проверить текущий активный фрейм, а потом уже все остальные" — идея хорошая.