распараллельте размер стека в Windows (Visual C++)

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

10
задан Gilles 'SO- stop being evil' 10 October 2012 в 12:45
поделиться

2 ответа

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

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

9
ответ дан 3 December 2019 в 22:36
поделиться

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

6
ответ дан 3 December 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: