как в си билдере задать размер стека? i love stack overflow error
Это требует 400Мб на стеке. Такая ситуация? Если да - то делать через динамику (new/delete <-> malloc/free). Статические массивы рулят только до размеров 4Кб.
int func(...)
{
int DATA[10000*10000];
}
Если рекурсия глубокая - можно подправить стек в компиляторе. но я бы советовал развернуть рекурсию в цикл и использовать искусственный стек.
Если прога требует больше 10Мб на стек - значит, нездоровое проектирование.
Про билдер не знаю, но в Delphi это делается тут:
Если не секрет, чем так уж плох большой stack. Ведь реальная-то память всё равно будет выделяться только при использовании её, а за%№*ание адресного пространства...use 64-bit, Luke!
оффтоп, очень порадовало ограничение памяти в баксах
---
"Powered by Motorollah!"
Переписать алгоритм так, чтобы юзалась своя коллекция-stack, а не рекурсия.
В добавок --- по кускам.
ОС отрабатывает его настолько плохо, что надо делать это руками?
---
Q21: что такое Win2k?
A21: состема.
"Чистые"(на основе системного стека) рекурсивные алгоритмы - очень плохо управляемые, т.к. системный стек - очень закрытый, и имеет мало поддерживаемых операций над собой.
Для нормальной управляемости не хватает таких операций, как:
1. Получение информации, чего и сколько уже есть в стеке
2. Массовая вставка
3. Массовое удаление
4. Удаление из середины
5. Сохранение/восстановление стека
6. выгрузка части стека из памяти
Зачем тебе это?
Ты ж, вроде, насильник.
Выгрузкой стека из памяти, как и вообще выгрузкой памяти,
вообще-то, заведует ОС.
Остальное --- не нужно.
Всем этим заведует ОС.
Если последняя поддерживает только си, тем хуже для всех.
И для сей, и для ОС.
---
...Я работаю антинаучным аферистом...
Для выполнения "незапланированных" задач, которых в реальных задачах, а не в учебных - довольно много.
Например, во время обхода дерева в глубину - необходимо удалить часть дерева.
> Остальное --- не нужно.
Кому не нужно?
Студентам, которые привыкли решать свои задачи про коней в вакууме?
Как ты собираешься:
Выполнять прерывание программы, например, чтобы продолжить обсчет не сейчас, а чуть позже?
Разнесить обсчет по нескольким процессам?
выводить информацию - что уже обработано, что стоит в очереди на обработку?
Делать приоритетный обсчет, когда "узлы" не равноценные?
Делать быстрый backtracking?
(Кстати, вы, насильники, setjmp/longjmp себе придумали для этого.)
Если бы это было нужно, то в практических языках,
к которым ты относишь си и производные от него,
были бы равноправные продолжения.
Последнего не наблюдается.
Отсюда вывод: либо это не нужно,
либо си-подобные языки не являются практическими,
а существуют только как учебные для студентов.
---
...Я работаю антинаучным аферистом...
В практических языках есть класс CStack - который все вышеприведенные операции поддерживает.
---
...Я работаю антинаучным аферистом...
И так, и так - в зависимости, от настроек и реализации.
Иначе оно делалось бы на системном стеке, для которого есть
аппаратная поддержка со стороны оборудования и программная ---
со стороны ОС.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
Frame
как в си билдере можно задать размер стека, для моей проги он нужен не***во огромный.(расположение квадратов на плоскости, все меры конечны: размеры и кол-вотак что бы незаполненная площадь была минимальной.(перебор на 2-х матрицах)