Общего размер стека будет размером стеки вы просили, когда вы создали нить (или связанную программу, если это основной поток).
Есть некоторые предварительные ссылки на получение размера стека для пула потоков в Windows 7 на MSDN (QueryThreadpoolStackInformation
).
В качестве приближения вы можете сравнить адрес локальной переменной с адресом другой локальной переменной далее по стеку, чтобы получить сумму от нас. Я считаю, что то, как программа, запущенная в Windows, выбирает локальные переменные в пространстве виртуальной памяти, выделяется в поток, зависит от реализации исполняемого файла этого языка, а не того, что действительно знает о Windows; вместо этого вы получаете исключение, когда пытаетесь получить доступ к адресу чуть ниже памяти, выделенной для стека.
Другой альтернативой усложнению кода с проверкой того, достиг ли стека лимита, является добавление обработчика исключений для EXCEPTION_STACK_OVERFLOW
, который будет вызван ОС при проверке того, что стек достиг своего предела. Есть пример here.