Re: Размер стека, сколько свободно?
От: korzhik Россия  
Дата: 20.11.06 11:12
Оценка: 3 (2) +1
Здравствуйте, Analitic, Вы писали:

A>Есть ли способ посмотреть в отладчике, какой размер стека был выделен под поток?

A>Сколько осталось свободного места в стеке?
A>Под Visual Studio C++.


Если ввести TIB в окне отладчика watch то там будет показываться Thread Information Block

у него есть поля pvStackUserTop и pvStackUserBase

может это как то поможет.
Re: Размер стека, сколько свободно?
От: Максим Алексейкин США  
Дата: 20.11.06 11:03
Оценка: -1
Здравствуйте, Analitic, Вы писали:

A>Есть ли способ посмотреть в отладчике, какой размер стека был выделен под поток?

A>Сколько осталось свободного места в стеке?
A>Под Visual Studio C++.


а задача чисто академическая или практическая? что то практической ценности не вижу.
тем не менее можно постепенно выбирать стэк, а потом, когда система обругается на переполнение все подсчитать.
глянь здесь для начала, дальше, думаю все понятно.
Re[7]: Размер стека, сколько свободно?
От: Аноним  
Дата: 20.11.06 17:38
Оценка: +1
A>но при создании потока методом _beginthreadex(NULL, размер стека, ...) — сразу покажет верный результат. Как узнать какой максимально возможный размер стека в Мain — пока загадка
1 MB. Обычно. Вообще это определяется спец полем в РЕ заголовке ехешника. по дефолту линкер студии пишет туда 1 мб.
Кстати это значение вроде как определяет дефолтовый размер стека и других потоков создаваемых апликухой.
Размер стека, сколько свободно?
От: Analitic Россия  
Дата: 20.11.06 10:28
Оценка:
Есть ли способ посмотреть в отладчике, какой размер стека был выделен под поток?
Сколько осталось свободного места в стеке?
Под Visual Studio C++.
Учиться, учиться и еще раз учиться...
Re[2]: Размер стека, сколько свободно?
От: Максим Алексейкин США  
Дата: 20.11.06 11:03
Оценка:
опс, надо же так облажаться вопрос то и не прочитал правильно, сори
Re[3]: Размер стека, сколько свободно?
От: Максим Алексейкин США  
Дата: 20.11.06 11:07
Оценка:
по сути вопроса — можно запоминать значение esp при старте а потом считать сколько примерно осталось свободного места. максимальное значение нам известно, если это твоя прога.
Re[2]: Размер стека, сколько свободно?
От: Analitic Россия  
Дата: 20.11.06 11:46
Оценка:
Спасибо то что надо — очень полезный пример:
http://www.microsoft.com/msj/archive/s2cea.htm#fig1
Учиться, учиться и еще раз учиться...
Re[3]: Размер стека, сколько свободно?
От: korzhik Россия  
Дата: 20.11.06 11:49
Оценка:
Здравствуйте, Analitic, Вы писали:

A>Спасибо то что надо — очень полезный пример:

A>http://www.microsoft.com/msj/archive/s2cea.htm#fig1

ну и каким образом у вас получилось?
потому что я что то не допёр
отладчик показывает какое то число а вот чего дальше с ним делать я не сообразил
Re[4]: Размер стека, сколько свободно?
От: Аноним  
Дата: 20.11.06 12:10
Оценка:
esp отнимать
Re[4]: Размер стека, сколько свободно?
От: Analitic Россия  
Дата: 20.11.06 12:31
Оценка:
Здравствуйте, korzhik, Вы писали:

K>ну и каким образом у вас получилось?

K>потому что я что то не допёр
K>отладчик показывает какое то число а вот чего дальше с ним делать я не сообразил

Введите в окне watch:
*(((int*)TIB)+1)-*(((int*)TIB)+2)

получите размер уже использованого стека, осталось выяснить как получить максимальный размер стека потока.
Учиться, учиться и еще раз учиться...
Re[5]: Размер стека, сколько свободно?
От: korzhik Россия  
Дата: 20.11.06 13:22
Оценка:
Здравствуйте, Analitic, Вы писали:

A>Здравствуйте, korzhik, Вы писали:


K>>ну и каким образом у вас получилось?

K>>потому что я что то не допёр
K>>отладчик показывает какое то число а вот чего дальше с ним делать я не сообразил

A>Введите в окне watch:

A>*(((int*)TIB)+1)-*(((int*)TIB)+2)

я тоже так думал. но вот ставлю брикпоинт и смотрю — показывает 20480
потом добавляю в функию массив на стеке int arr[100]; запускаю опять, смотрю — опять 20480
Re[6]: Размер стека, сколько свободно?
От: Analitic Россия  
Дата: 20.11.06 14:05
Оценка:
Здравствуйте, 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
Учиться, учиться и еще раз учиться...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.