Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Массив из 5 и выше млн. элементов типа single-переполнение стека [D6, WinXP]


Страницы:   1 2

alexander_ua ©   (2005-07-21 18:11:00) 

В процедуре объявляю массив типа single, размерность - 5 млн. элементов. Программа компилируется, запускается. При попытке работать с массивом дает ошибку "Переполнение стека". Размер стека сделал максимально возможным, но это ничего не дало. Как лечить?


alexander_ua   (2005-07-25 12:43:00) [1]

Уважаемые коллеги! Спасибо говорю ВСЕМ, Вы ничего такого не подумайте! Действительно, всем огромное спасибо, так быстро и качественно решили мою проблему!


Fay   (2005-07-22 19:03:00) [2]

2 evvcom ©   (22.07.05 17:41) [35]
Уверен, Юрий Зотов как-нибудь перезимует без этих лавров 8)


evvcom   (2005-07-22 17:41:00) [3]


> 2 evvcom
> Ок, спасибо. Попробовал - работает.

Странные люди. Лавры достаются последнему? Еще Юрий Зотов ©   (21.07.05 18:16) [2] об этом говорил. Пост [32] должен был быть после [2]


Юрий Зотов   (2005-07-22 17:27:00) [4]

> alexander_ua   (22.07.05 17:13) [32]

> матрица 3200*3200 на intel pentium IV 2.8 Гц решается 25
> минут

Это еще немного. Численное решение многих задач матмоделирования тоже сводится к решению СЛАУ и счет может длиться неделями.

Оптимизируйте алгоритм и сами вычисления, больше тут ничего не придумаешь.


Digitman   (2005-07-22 17:18:00) [5]


> alexander_ua   (22.07.05 17:13) [32]


на то интел придумал хренову тучу технологий/механизмов : MMX, SSE и иже с ними


alexander_ua   (2005-07-22 17:13:00) [6]

2 evvcom
Ок, спасибо. Попробовал - работает. Теперь уже возникают проблемы другого плана - скорость решения этой самой СЛАУ. Так, к примеру матрица 3200*3200 на intel pentium IV 2.8 Гц решается 25 минут, что же будет на моем домашнем celeron 850... Но это как говорится уже другая песня...


evvcom   (2005-07-22 17:10:00) [7]


> я тоже по русски написал - не одного уравнения, а системы.

ну да, систему и я имел ввиду.

> Если я правильно понял вопрос, конечно

Правильно. Тогда динамический массив, однозначно. Имхо.


alexander_ua   (2005-07-22 17:06:00) [8]

2 evvcom
я не по-русски написал?

я тоже по русски написал - не одного уравнения, а системы.

Только 3000 неизвестных? Или будут другие уравнения, 2000, 2500 неизвестных?

Количество неизвестных определяется исходя из задаваемых пользователем параметров, т.е. к примеру при одних заданных условиях количество=3000, при других условиях - 2500.
Если я правильно понял вопрос, конечно.


evvcom   (2005-07-22 16:59:00) [9]


> что Вы имеете ввиду под фразой "Для решения одного единственного уравнения?".

я не по-русски написал?

> "Одной единственной размерности?" - что имеется ввиду?

Только 3000 неизвестных? Или будут другие уравнения, 2000, 2500 неизвестных?


alexander_ua   (2005-07-22 14:01:00) [10]

2 _Lucky_
Система линейных алгебраический уравнений
a11*x1+a12*x2+...+a1n*xn=b1
...............
an1*x1+an2*x2+...+ann*xn=bn


_Lucky_   (2005-07-22 13:51:00) [11]

А чего за уравнения-то? примерчик приведи.


Digitman   (2005-07-22 13:34:00) [12]


> Или я неправильно считаю?


да по колено как ты считаешь)

хоть 5 хоть 34 мбайта - такие объемы слишком серьезны для дел, касаемых стека ... впору призадуматься о переделке алгоритма в части переноса таких аллокаций из стека в кучу


Anatoly Podgoretsky   (2005-07-22 13:31:00) [13]

alexander_ua   (22.07.05 13:26) [23]
3000*3000*SizeOf(Single) Я ошибся посчитал для Double
Все равно для такого размера стек потребуется мегабайт 40 и то если нет рекурсии.


alexander_ua   (2005-07-22 13:27:00) [14]

2 Джо
Ну не знаю, как насчет избаловал... Я бы сказал не так, а к примеру "дал возможность считать то (или с такой точностью), о какой раньше можно было только мечать..."


alexander_ua   (2005-07-22 13:26:00) [15]

2 Anatoly Podgoretsky
Интересно, почему у Вас такой размер большой получается. Если взять массив 3000*3000 типа single (4 byte), то получаем объем памяти 3000*3000*4/(1024*1024)=34 мегабайта. Или я неправильно считаю?


Джо   (2005-07-22 13:26:00) [16]

Читаешь про такие массивы и диву даешься - насколько Виндовс людей избаловал, да...


Anatoly Podgoretsky   (2005-07-22 13:19:00) [17]

TUser ©   (22.07.05 12:42) [18]
В 80 мегабайт?


alexander_ua   (2005-07-22 12:48:00) [18]

2 evvcom
Так, поясните тогда пожалуйста что Вы имеете ввиду под фразой "Для решения одного единственного уравнения?". Как я уже сказал, решается СИСТЕМА уравнений.
"Одной единственной размерности?" - что имеется ввиду?


Digitman   (2005-07-22 12:48:00) [19]


> В процедуре объявляю массив типа single, размерность - 5
> млн. элементов


больше так не делай.


TUser   (2005-07-22 12:42:00) [20]

Еще одно решение в догонку - локальный статический массив, + диррективы $M/$MAXSTACKSIZE.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо