Здравствуйте, Analitic, Вы писали:
A>Есть ли способ посмотреть в отладчике, какой размер стека был выделен под поток? A>Сколько осталось свободного места в стеке? A>Под Visual Studio C++.
Здравствуйте, Analitic, Вы писали:
A>Есть ли способ посмотреть в отладчике, какой размер стека был выделен под поток? A>Сколько осталось свободного места в стеке? A>Под Visual Studio C++.
а задача чисто академическая или практическая? что то практической ценности не вижу.
тем не менее можно постепенно выбирать стэк, а потом, когда система обругается на переполнение все подсчитать.
глянь здесь для начала, дальше, думаю все понятно.
A>но при создании потока методом _beginthreadex(NULL, размер стека, ...) — сразу покажет верный результат. Как узнать какой максимально возможный размер стека в Мain — пока загадка
1 MB. Обычно. Вообще это определяется спец полем в РЕ заголовке ехешника. по дефолту линкер студии пишет туда 1 мб.
Кстати это значение вроде как определяет дефолтовый размер стека и других потоков создаваемых апликухой.
по сути вопроса — можно запоминать значение esp при старте а потом считать сколько примерно осталось свободного места. максимальное значение нам известно, если это твоя прога.
Здравствуйте, korzhik, Вы писали:
K>ну и каким образом у вас получилось? K>потому что я что то не допёр K>отладчик показывает какое то число а вот чего дальше с ним делать я не сообразил
Введите в окне watch:
*(((int*)TIB)+1)-*(((int*)TIB)+2)
получите размер уже использованого стека, осталось выяснить как получить максимальный размер стека потока.
Здравствуйте, Analitic, Вы писали:
A>Здравствуйте, korzhik, Вы писали:
K>>ну и каким образом у вас получилось? K>>потому что я что то не допёр K>>отладчик показывает какое то число а вот чего дальше с ним делать я не сообразил
A>Введите в окне watch: A>*(((int*)TIB)+1)-*(((int*)TIB)+2)
я тоже так думал. но вот ставлю брикпоинт и смотрю — показывает 20480
потом добавляю в функию массив на стеке int arr[100]; запускаю опять, смотрю — опять 20480
Здравствуйте, korzhik, Вы писали:
K>я тоже так думал. но вот ставлю брикпоинт и смотрю — показывает 20480 K>потом добавляю в функию массив на стеке int arr[100]; запускаю опять, смотрю — опять 20480
Мы с вами одинаково ошибались
Результат, все вводиться просто в окне Watch:
Какой сейчас размер стека:
(*(((int*)TIB)+1)-*(((int*)TIB)+2))
Может увеличиваться по мере необходимости, так у меня в потоке Main сначала показывает 12 кб,
но при создании потока методом _beginthreadex(NULL, размер стека, ...) — сразу покажет верный результат. Как узнать какой максимально возможный размер стека в Мain — пока загадка
Cколько сейчас занято в стеке можно узнать так:
*(((int*)TIB)+1)-ESP