Как предотвратить переполнение стека путем мониторинга размера стека? - PullRequest
5 голосов
/ 28 мая 2009

Многие C / C ++ / Fortran и другие программисты столкнулись бы с ошибками «переполнения стека». У меня вопрос: есть ли инструмент, программа или простой фрагмент кода, который позволяет нам отслеживать или проверять размер стека во время работы программы? Это может быть полезно для определения места накопления стека и его возможного переполнения.

Ответы [ 2 ]

1 голос
/ 28 мая 2009

Я не знаю, есть ли программа, которая сделает это за вас, но вы можете легко проверить внутри функции, где находится указатель стека (по крайней мере, в C и C ++). Просто посмотрите на место в памяти любой переменной. Это не будет точное местоположение, но должно быть в пределах нескольких байтов (что хорошо для ваших целей), так как локальные переменные определены в стеке. Я думаю, что если вы хотите получить точное значение, вы можете получить его при помощи сборки.

Возможно, будет проще взглянуть на трассировку стека при сбое программы.

1 голос
/ 28 мая 2009

Посмотрите на этот вопрос . Принятый ответ цитирует Раймонда Чена:

If you have to ask, you're probably doing something wrong.

Если вам определенно нужно это сделать, то решение / инструмент будут зависеть от платформы. Одним из простых приемов является заполнение стека известным значением байта (например, AA) и отслеживание позиции первого байта, который не имеет этого значения. Это даст вам максимальный размер используемого стека, а не текущий размер стека.

...