powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как расширить стэк?
8 сообщений из 8, страница 1 из 1
Как расширить стэк?
    #33725944
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Есть прога, которая может импортировать и запускать функции из DLL
Я dll-ку сделал, все работает, только на вызове одной функции (очень большой) прога выдает stack overflow

Можно как-то расширить стэк или использовать другой?
Пока в голову приходит только создание потока с большим стэком и выполнения в нем.
...
Рейтинг: 0 / 0
Как расширить стэк?
    #33725968
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПривет всем!

Есть прога, которая может импортировать и запускать функции из DLL
Я dll-ку сделал, все работает, только на вызове одной функции (очень большой) прога выдает stack overflow

Можно как-то расширить стэк или использовать другой?
Пока в голову приходит только создание потока с большим стэком и выполнения в нем.

на чем пишешь ?
...
Рейтинг: 0 / 0
Как расширить стэк?
    #33726043
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JibSkeartна чем пишешь ?
DLL - MS VC 6.0
прога из которой DLL вызывается чужая - ничего не поменять.
...
Рейтинг: 0 / 0
Как расширить стэк?
    #33726093
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопрос:
У меня код функции примерно такой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
double Calc()
{
double Var1_1=Func1(- 0 . 06 *Par1- 0 . 043 *Par2+ 0 . 1 *Par3...);
double Var1_2=Func1( 0 . 04 *Par1- 0 . 2 *Par2+ 0 . 3 *Par3...);
...
double Var2_1=Func2(- 0 . 3 *Var1_1- 0 . 54 *Var1_2+ 0 . 1 *Var1_3...);
double Var2_2=Func2( 0 . 04 *Var1_1- 0 . 2 *Var1_2+ 0 . 3 *Var1_3...);
... 
// и так 2000 строк 
}
Уменьшится ли объем требуемого стэка если код оформить так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
double Func1_1()
{
   return Func1(- 0 . 06 *Par1- 0 . 043 *Par2+ 0 . 1 *Par3...);
}

double Func1_2()
{
   return Func1( 0 . 04 *Par1- 0 . 2 *Par2+ 0 . 3 *Par3...);
}

double Calc()
{
double Var1_1=Func1_1();
double Var1_2=Func1_2();
...
}
...
Рейтинг: 0 / 0
Как расширить стэк?
    #33726162
А. К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Память под переменные выделяется из стека, также, по умолчанию, параметры функции размещаются тоже в стеке.

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
// пример передачи параметра по значению
void func(double v1, double v2 ...)
{
}

// пример передачи параметра по ссылке
void func1(const double& v1, const double& v2)
{
}

...
Рейтинг: 0 / 0
Как расширить стэк?
    #33726179
LeonM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
размер стека устанавливается в настройках проекта
...
Рейтинг: 0 / 0
Как расширить стэк?
    #33726338
a_s_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант 1:
Выдели нужный объём памяти и перенеси стек туда.
Вариант 2:
В заголовке файла(который вызывает dll) есть параметр Stack Reserv Size. Можно с ним поиграться. Только это надо до запуска делать.
...
Рейтинг: 0 / 0
Как расширить стэк?
    #33726583
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем. Проблема с руками :)
Нашел косяк. У проги, куда импортирую, есть некоторые проблемы с именами импортируемых функций (в DLL менял имя несколько раз), и в итоге получилось что функция-оболочка над моей DLL-функцией и DLL-функция оказались одноименными. В результате все рекурсивно зациклилось.

Переименовал - заработало.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как расширить стэк?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]