Размер стека потоков в Windows (Visual С++)

Есть ли вызов для определения размера стека работающего потока? Я смотрю в документации по функциям потоков MSDN и не могу найти ее.

Ответ 1

В то время как API не имеет прямого определения размера стека, смежное виртуальное адресное пространство должно быть зарезервировано до максимального размера стека - это просто то, что большая часть этого пространства еще не выполнена. Вы можете воспользоваться этим и сделать два вызова VirtualQuery.

Для первого вызова передайте ему адрес любого значения в стеке, чтобы получить базовый адрес и размер в байтах зарезервированного пространства стека. На машине x86, где стек растет вниз, вычитайте размер с базового адреса и VirtualQuery еще раз: это даст вам размер пространства, зарезервированного для стека (если вы не точно на пределе размера стека в то время). Суммирование двух естественно дает вам общий размер стека.

Ответ 2

Вы можете получить текущий фиксированный размер с верхнего и нижнего уровня в TEB. Вы можете получить начальный запас и зафиксировать размеры процесса из PE-заголовка. Но вы не можете получить фактические размеры, переданные CreateThread, и нет никакого API, чтобы получить оставшийся размер зарезервированного или не зафиксированного из текущего стека, см. Размер стека нити.