Самый быстрый способ получить TID (блок информации о потоках) в 64-битном приложении Windows?

У меня очень требовательный к вычислениям модуль, в котором я добавил трассировку стека, чтобы найти конкретные проблемы. Хотя приложению разрешено работать медленнее, когда включена эта трассировка стека, оно не должно выполняться в 10 раз медленнее. Вот почему я не использую подпрограммы StackWalk из DBGHELP.DLL, но я сам прохожу стек, используя указатели фреймов (поэтому я не использую опцию компилятора пропуска указателей фреймов).

В большинстве случаев получение стека вызовов работает правильно и очень быстро, но в некоторых случаях моя логика не работает, потому что один из указателей фрейма указывает на адрес вне стека (немного, совсем немного).

Я знаю, что это, возможно, ошибка где-то, но чтобы сделать мой код более безопасным, мне нужен способ проверить, указывает ли указатель кадра на область памяти в стеке текущего потока или нет. Приложение является 64-битным и работает под Windows.

Код наКак получить информацию о стеке потоков в Windows? возможно, это решает проблему, но так как это вызывает другие функции, это, вероятно, заставляет мой код работать намного медленнее (честно говоря, я не тестировал его).

Я также нашел некоторый встроенный код сборки, который должен выполнить трюк (http://nasutechtips.blogspot.com/2011/01/thread-information-block-tib-and-fs.html), но встроенная сборка не поддерживается 64-битным компилятором Microsoft C ++.

Кроме того, внутреннее __readfsqword, похоже, не работает на 64-битной версии.

Любые другие предложения о том, как получить TIB на 64-битной как можно быстрее?

Ответы на вопрос(2)

Ваш ответ на вопрос