Существует ли вызов для определения размера стека рабочего потока? Я смотрел в документации функций потока MSDN и, может казаться, не нахожу ту.
Хотя не существует API для прямого определения размера стека, непрерывное виртуальное адресное пространство должно быть зарезервировано до максимального размера стека - просто большая часть этого пространства еще не задействована. Вы можете воспользоваться этим и сделать два вызова VirtualQuery .
Для первого вызова передайте ему адрес любого значения в стеке, чтобы получить базовый адрес и размер в байтах зафиксированного пространства стека. На машине x86, где стек растет вниз, снова вычтите размер из базового адреса и VirtualQuery: это даст вам размер пространства, зарезервированного для стека (при условии, что вы не точно находитесь на пределе размера стека в то время ). Суммирование этих двух, естественно, дает вам общий размер стека.
Вы можете получить текущий зафиксированный размер сверху и снизу в TEB . Вы можете получить начальный резерв процесса и размеры фиксации из заголовка PE . Но вы не можете получить фактические размеры, переданные в CreateThread , а также не существует какого-либо API для получения оставшегося размера зарезервированного или зафиксированного из текущего стека, см. Размер стека потоков .