0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
|
||||||
1 | ||||||
Двухмерный динамический массив09.11.2012, 11:23. Показов 2648. Ответов 38
Метки нет (Все метки)
Мне нужно создать 4 многомерных динамических массивов, размерность которых 10000000 10000000, и у меня не получалось их создавать на столько большими, непосредственно в коде создавал все 4, потому что в среде Borland developer studio 2005 выдавало ошибку что то на подобии переполнения стека, тогда мне посоветовали их создать с помощью процедуры все сразу и использовать её при создании необходимого количества, ниже привел код.
Но теперь Borland developer studio 2005 сразу выдает ошибку на саму процедуру. Помогите разобраться что не так в этом всём, может сам Borland developer studio 2005 касячит, и стоит использовать другую среду, или я может что то не понимаю и делаю не так
0
|
09.11.2012, 11:23 | |
Ответы с готовыми решениями:
38
Двухмерный динамический массив Динамический двухмерный массив двухмерный динамический массив Двухмерный динамический массив |
Неэпический
|
||||||
09.11.2012, 12:06 | 21 | |||||
Дело в том, что new кидает исключение и до проверки дело не доходит
0
|
0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
|
|
09.11.2012, 12:23 [ТС] | 26 |
Похоже, что все таки дело в памяти, чтобы протестировать брейкпойнтом, ввёл данные где w=10000000, а h=100, после того как нажал выполнить программу, компьютер мой умер, всё зависло минут на 5.
Вечером ещё раз попробую, потому что сейчас нужно бежать. И вопрос, а если у меня получилось создать 1 массив 100000 на 100000 без ошибок, то 2 массива уже не получиться создать такими большими?! то есть память 1 и если 1 массив её заполняет целиком то уже 2 массива требуют в 2 раза больше памяти или это не так?!
0
|
Неэпический
|
|
09.11.2012, 12:26 | 27 |
Вам не хватает памяти, поэтому оператор new не может её выделить и кидает исключение.
Лично у меня это произошло, когда кончились 2Гб памяти, любезно предоставленные моей программе операционной системой
0
|
09.11.2012, 12:29 | 28 |
Не, ёлки-палки, но какая задача может потребовать массив 100000 на 100000 на 8 байт типа дабл? Это же 8 гигабайт! Вы там менеджер памяти для Crysis 5 пишете?
0
|
Неэпический
|
|
09.11.2012, 12:35 | 29 |
Смотрите первый пост.
Кликните здесь для просмотра всего текста
Мне нужно создать 4 многомерных динамических массивов, размерность которых 10000000 10000000
727 тб вроде
0
|
09.11.2012, 12:42 | 32 |
а я про задачу, требующую массив такого размера. Что-то мне подсказывает, что если автор не собирается сохранять в оперативе HD-фильмы, есть способ обойтись без таких обильных выделений.
0
|
Программист
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
|
|
09.11.2012, 13:28 | 34 |
АлексИванов, здравствуйте. В Вашем случае тупо не хватает ни оперативной ни виртуальной памяти. Как написал Croessmah в #29 это порядка 728 Tb. Ответ на вопрос какую такую задачу вы решаете мы также не получили...
Как вариант можно предложить только использование разреженных массивов.
0
|
0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
|
||||||
09.11.2012, 17:50 [ТС] | 35 | |||||
В новом посте двухмерный массив #3 описал условие задачи.
Добавлено через 50 секунд Kuzia domovenok, В новом посте двухмерный массив #3 описал условие задачи. Добавлено через 13 минут Вообще у меня стоит задача такая: Есть 3 уравнения, полученных по средством численного метода Эйлера, стохастические, дифференциальные с мультипликативным шумом,их нужно промоделировать, и построить разные графики такие как : оценку матожидания, оценку дисперсии, гистограмму плотности распределения случайной величины, двухмерную гистограмму, тоесть поверхность, и двухмерный фазовый портрет. Всё выше перечисленное относиться к области теории вероятности, методам Монте-Карло, и вычислительной математике. 3 уравнения записаны в явном виде, и для их реализации нужно смоделировать M=1000(чеб больше траекторий тем точнее решается задача) штук траекторий для каждого уравнения, где 1 траектория моделируется как правило на сетке от T=[0,100] с шагом h=0,0001(чем меньше шаг,тем более точно получается расчет). Оценку матожидания, оценку дисперсии, гистограмму плотности распределения случайной величины я строить умею, и для реализации использовал одномерные массивы, но когда речь пошла о реализации двухмерного фазового портрета то тут я решил использовать двухмерные массивы. Что такое двумерная плотность: Берется срез в произвольном узле например при T=70 и на каждой из 1000 траекторий запоминаются значения, например y1, аналогично запоминается значения переменной y2, и того получилось 1000 значений y1 и 1000 значений y2. Построение 2мерной плотности происходит следующим образом, ищется максимальное и минимальное значение y1 и y2, задается разбиение сетки например hag=100. рисуется сетка 100 на 100 с шагом (max-min)/hag. Далее берется первая траектория и соответствующая точка на ней (y1,y2) и смотрим в какой квадрат нашей сетки она попала, и двумерному массиву размер которого 100 на 100 соответствующим координатам присваиваем 1 count[i][j]=count[i][j]+1. В итоге в этом двумерном массиве хранятся количество попаданий точек (y1,y2) в соответствующий квадрат сетки, и получается 3х емрная поверхность. Что такое двухмерный фазовый портрет: вот тут как раз нужно проделать примерно то же что и выше, разница только в том что выше учитывалась 1 точка на 1 траектории 1го уравнения, а здесь нужно запомнить все точки на 1 траектории, то есть после построения 1 траектории пар (y1,y2) будет 1000000, которые я как раз решил сохранять в двумерный массив, то есть для компоненты y1 один двумерный массив размер которого 1000000x1000, и аналогично для компоненты y2. далее так же идет перебор, нахождения min и max, задается количество разбиения и строиться 2мерный массив с количеством попаданий соответствующих пар (y1,y2) в построенную сетку.И получается трехмерная картинка. Так как я не опытный программист, первое что пришло в голову всё это реализовывать с помощью двухмерного массива.О других способах ещё не думал, как обойтись без них.
0
|
09.11.2012, 18:23 | 36 |
с такими большими массивами информации никто не работает. Подгружай из файла/подзаписывай в файл по мере необходимости.
Но я не вижу такой необходимости! Ну создашь файл на N ТБ Что он тебе даст? Ты его на экран не отправишь, для построения графиков там понадобятся жалкие доли процента от количества тех точек, что ты насчитал. И то по 10 точек в одном пикселе монитора получишь. Искать решение уравнений, если я не ошибаюсь, можно и не сохраняя в памяти все промежуточные результаты, (но тут я не силён). Так с какой целью место на диске тратить?
1
|
0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
|
|
09.11.2012, 18:32 [ТС] | 37 |
Точно, я могу сначала все данные сразу сохранить в файлы, а потом считывать с 1 файла, и со второго файла, а потом уже полученную точку располагать в сетку. Но как обойтись без сеточного массива 100x100, куда сохраняются количество точек?!
И как считывать по 1 элементу из файла в котором будет храниться много элементов?
0
|
09.11.2012, 18:50 | 38 | |||||
Скажу по секрету, в Си вроде нет такого понятия как многомерный массив. Есть "массив массивов". Более того, память ПК линейна и расположить мы в ней массив можем, как сплошной одномерный массив, размером m*n, обращаясь к элементу a[i][j] как a[i*n+j]
Конечно, размер от того каким образом мы храним массив не меняется, но можно подгружать из файла, скажем лишь тот столбец, в который записываем элементы. Например
0
|
0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
|
|
09.11.2012, 18:57 [ТС] | 39 |
Да тут в принципе можно 100 на 100 создать массив двумерный, на это памяти хватает, вот как считывать из файла ровно по 1 элементу?!
Например в файле хранятся числа 100 220 2,2131 3,12421 и как их считать по 1?
0
|
09.11.2012, 18:57 | |
09.11.2012, 18:57 | |
Помогаю со студенческими работами здесь
39
Двухмерный динамический массив Динамический двухмерный массив Двухмерный динамический массив строк Указатель на двухмерный динамический массив Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |