audel
|
stranger
|
|
|
|
Рег.: 02.03.2005
|
Сообщений: 20
|
|
Рейтинг: 0
|
|
как в си билдере задать размер стека? i love stack overflow error
14.05.2005 04:58
|
|
|
как в си билдере можно задать размер стека, для моей проги он нужен не***во огромный. (расположение квадратов на плоскости, все меры конечны: размеры и кол-во),так что бы незаполненная площадь была минимальной.(перебор на 2-х матрицах)
Редактировал DarkGray (14.05.2005 13:09)
|
|
Basilio
|
GreenOne
|
|
|
|
Рег.: 14.10.2002
|
Сообщений: 13750
|
Из: Москва
|
Рейтинг: 3476
|
|
Re: i love stack overflow error
[re: audel]
14.05.2005 06:48
|
|
|
Типичное место, когда возникает переполнение стека - функция с офигенно большой локальной переменной:
code:
int func(...)
{
int DATA[10000*10000];
}
Это требует 400Мб на стеке. Такая ситуация? Если да - то делать через динамику (new/delete <-> malloc/free). Статические массивы рулят только до размеров 4Кб.
Если рекурсия глубокая - можно подправить стек в компиляторе. но я бы советовал развернуть рекурсию в цикл и использовать искусственный стек. Если прога требует больше 10Мб на стек - значит, нездоровое проектирование.
Про билдер не знаю, но в Delphi это делается тут:
Редактировал Basilio (14.05.2005 06:50)
|
|
__ka
|
Nobrainer
|
|
|
|
Рег.: 20.11.2004
|
Сообщений: 533
|
|
Рейтинг: 45
|
|
Re: i love stack overflow error
[re: Basilio]
14.05.2005 09:35
|
|
|
Если не секрет, чем так уж плох большой stack. Ведь реальная-то память все равно будет выделяться только при использовании ее, а за%?*ание адресного пространства...use 64-bit, Luke!
|
#warning "You should include <sys/socket.h>. This time I will do it for you." |
|
psa
|
sir
|
|
|
|
Рег.: 03.04.2004
|
Сообщений: 1205
|
|
Рейтинг: 509
|
|
Re: i love stack overflow error
[re: Basilio]
14.05.2005 10:01
|
|
|
оффтоп, очень порадовало ограничение памяти в баксах
|
Antivirus alert: file .signature infected by signature virus. |
|
KOHTPA
|
Carpal Tunnel
|
|
|
|
Рег.: 22.01.2003
|
Сообщений: 33647
|
|
Рейтинг: 2374
|
|
Re: i love stack overflow error
[re: psa]
14.05.2005 10:30
|
|
|
limit = $1000000
--- "Powered by Motorollah!"
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31415
|
|
Рейтинг: 8952
|
|
Re: i love stack overflow error
[re: audel]
14.05.2005 12:08
|
|
|
Переписать алгоритм так, чтобы юзалась своя коллекция-stack, а не рекурсия.
|
|
KOHTPA
|
Carpal Tunnel
|
|
|
|
Рег.: 22.01.2003
|
Сообщений: 33647
|
|
Рейтинг: 2374
|
|
Re: i love stack overflow error
[re: DarkGray]
14.05.2005 12:56
|
|
|
Правильно это называется так: разместить стек в куче. В добавок --- по кускам.
ОС отрабатывает его настолько плохо, что надо делать это руками?
--- Q21: что такое Win2k? A21: состема.
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31415
|
|
Рейтинг: 8952
|
|
Re: i love stack overflow error
[re: KOHTPA]
14.05.2005 13:03
|
|
|
При чем здесь ОС?
"Чистые"(на основе системного стека) рекурсивные алгоритмы - очень плохо управляемые, т.к. системный стек - очень закрытый, и имеет мало поддерживаемых операций над собой.
Для нормальной управляемости не хватает таких операций, как: 1. Получение информации, чего и сколько уже есть в стеке 2. Массовая вставка 3. Массовое удаление 4. Удаление из середины 5. Сохранение/восстановление стека 6. выгрузка части стека из памяти
|
|
KOHTPA
|
Carpal Tunnel
|
|
|
|
Рег.: 22.01.2003
|
Сообщений: 33647
|
|
Рейтинг: 2374
|
|
Re: i love stack overflow error
[re: DarkGray]
14.05.2005 13:14
|
|
|
Стек с удалением из середины? Зачем тебе это?? Ты ж, вроде, насильник.
Выгрузкой стека из памяти, как и вообще выгрузкой памяти, вообще-то, заведует ОС.
Остальное --- не нужно.
Всем этим заведует ОС. Если последняя поддерживает только си, тем хуже для всех. И для сей, и для ОС.
--- ...Я работаю антинаучным аферистом...
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31415
|
|
Рейтинг: 8952
|
|
Re: i love stack overflow error
[re: KOHTPA]
14.05.2005 14:03
|
|
|
> Стек с удалением из середины?
Для выполнения "незапланированных" задач, которых в реальных задачах, а не в учебных - довольно много.
Например, во время обхода дерева в глубину - необходимо удалить часть дерева.
> Остальное --- не нужно.
Кому не нужно? Студентам, которые привыкли решать свои задачи про коней в вакууме?
Как ты собираешься: Выполнять прерывание программы, например, чтобы продолжить обсчет не сейчас, а чуть позже? Разнесить обсчет по нескольким процессам? выводить информацию - что уже обработано, что стоит в очереди на обработку? Делать приоритетный обсчет, когда "узлы" не равноценные? Делать быстрый backtracking?
|
|
KOHTPA
|
Carpal Tunnel
|
|
|
|
Рег.: 22.01.2003
|
Сообщений: 33647
|
|
Рейтинг: 2374
|
|
Re: i love stack overflow error
[re: DarkGray]
14.05.2005 14:48
|
|
|
А выходить из вложенных вызовов слабо? (Кстати, вы, насильники, setjmp/longjmp себе придумали для этого.)
Если бы это было нужно, то в практических языках, к которым ты относишь си и производные от него, были бы равноправные продолжения. Последнего не наблюдается.
Отсюда вывод: либо это не нужно, либо си-подобные языки не являются практическими, а существуют только как учебные для студентов.
--- ...Я работаю антинаучным аферистом...
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31415
|
|
Рейтинг: 8952
|
|
Re: i love stack overflow error
[re: KOHTPA]
14.05.2005 15:03
|
|
|
В практических языках есть класс CStack - который все вышеприведенные операции поддерживает.
|
|
KOHTPA
|
Carpal Tunnel
|
|
|
|
Рег.: 22.01.2003
|
Сообщений: 33647
|
|
Рейтинг: 2374
|
|
Re: i love stack overflow error
[re: DarkGray]
14.05.2005 15:13
|
|
|
И он работает с системным стеком, а не выделяет место в куче?
--- ...Я работаю антинаучным аферистом...
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31415
|
|
Рейтинг: 8952
|
|
Re: i love stack overflow error
[re: KOHTPA]
14.05.2005 16:29
|
|
|
И так, и так - в зависимости, от настроек и реализации.
|
|
KOHTPA
|
Carpal Tunnel
|
|
|
|
Рег.: 22.01.2003
|
Сообщений: 33647
|
|
Рейтинг: 2374
|
|
Re: i love stack overflow error
[re: DarkGray]
14.05.2005 16:37
|
|
|
То есть, все-таки это игрушка для студентов. Иначе оно делалось бы на системном стеке, для которого есть аппаратная поддержка со стороны оборудования и программная --- со стороны ОС.
--- ...Я работаю антинаучным аферистом...
|
|