Форум программистов, компьютерный форум CyberForum.ru

Создать отдельный стек для функции - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
29.11.2011, 22:26     Создать отдельный стек для функции #1
необходимо. Мне надо вызывать рекурсивную функцию; при этом происходит переполнение стека, мне бы хотелось бы это контролировать.
g++ не поддерживает обработку SEH- исключений, отловить переполнение стека, как, впрочем и другие я не могу. Программа падает просто и всё.
вызов рекурсивной функции в отдельном потоке с созданным и, как следствие, контролируемым стеком (билиотека pthread) рассамтриваю только в качестве ПОСЛЕДНЕГО варианта.

Спасибо, кто откликнется

Добавлено через 48 минут
Только что в отладчике OllyDbg исполоьзовал такой приём: выделял объём памяти и вручную менял регистр ESP, чтобы он указывал на эту память и всё получалось, эта память работала как стек.
Попробую такую идею замутить с аммесблерными вставками, они нужны будут для изменения ESP, если чё, отпишусь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2011, 22:26     Создать отдельный стек для функции
Посмотрите здесь:

Создать стек. выручайте!!!!! C++
C++ при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"?
C++ Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести эталонный символ.
C++ C++, создать стек
C++ создать стек для с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.12.2011, 13:10     Создать отдельный стек для функции #41
Цитата Сообщение от kravam Посмотреть сообщение
В частности, я не возьмусь определять глубину стека до определённого момента ни примерно, никак
Ставь 100. Если после запуска глубины не хватает, ставь 1000. Потом 10000. Любая вменяемая функция может 10000 раз рекурсивно вызваться. В противном случае ты используешь стековую память там, где нужно использовать динамическую.
Потом 100000 поставь, если приспичит.
Можно увеличить размер стека, если это действительно нужно.
Но писать собственный стек функций (на ассемблере подменяя ESP (OMG) ), чтобы отловить ошибку с бесконечной рекурсией... мягко выражаясь - маразм.

Цитата Сообщение от kravam Посмотреть сообщение
хорошо бы использовать счётчик да глубину рекурсии не определить
ВСЕГДА известная расчётная глубина. До одного-двух порядков она известна ВСЕГДА. В противном случае ты кидаешься программировать даже не пытаясь проектировать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
02.12.2011, 13:20     Создать отдельный стек для функции #42
Цитата Сообщение от Deviaphan Посмотреть сообщение
Любая вменяемая функция может 10000 раз рекурсивно вызваться.
под вменяемостью надо понимать, что у нее на стеке выделяется не очень много данных
те что у нее нет больших локальных нестатических массивов итп
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.12.2011, 13:23     Создать отдельный стек для функции #43
Цитата Сообщение от alex_x_x Посмотреть сообщение
под вменяемостью надо понимать
Ну да, именно это.)
Рекурсивные функции с большим количеством данных на стеке, заставляют задумываться о вменяемости программиста.)
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
02.12.2011, 14:04  [ТС]     Создать отдельный стек для функции #44
Цитата Сообщение от Deviaphan Посмотреть сообщение
Но писать собственный стек функций (на ассемблере подменяя ESP (OMG) ), чтобы отловить ошибку с бесконечной рекурсией... мягко выражаясь - маразм.
прошу больше меня не беспокоить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2011, 14:15     Создать отдельный стек для функции
Еще ссылки по теме:

Создать отдельный управляемый поток для бесконечного процесса C++
C++ Создать стек
C++ Функции в отдельный файл

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
02.12.2011, 14:15     Создать отдельный стек для функции
  #45

Не по теме:

Не верю в искренность просьбы.

Yandex
Объявления
02.12.2011, 14:15     Создать отдельный стек для функции
Ответ Создать тему
Опции темы

Текущее время: 21:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru