размер стека потоков в Windows (Visual C ++) - PullRequest
10 голосов
/ 19 марта 2010

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

Ответы [ 2 ]

9 голосов
/ 19 марта 2010

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

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

6 голосов
/ 19 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...