Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
Петр91 |
15.1.2012, 7:24
Сообщение
#1
|
|
Студент ![]() Группа: Участник Сообщений: 19 Регистрация: 10.6.2011 Пользователь №: 2731 Спасибо сказали: 0 раз(а) Репутация: 0
|
Ответа на данный вопрос в интернете не нашел, да и то, там только про VS.
Создаю массив в теле главной функции double *teta = new double [(M+1)*(N+1)*h]; и при больших значениях компилятор ругается, как увеличить максимальный размер массива? Прошу прощения, ошибка была не в массиве..) Но все равно, для интереса, как увеличить и макс размер какой может быть? |
|
|
|
|
ilyabvt |
15.1.2012, 14:41
Сообщение
#2
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3
|
Я так думаю что максимальный размер массива для 32 битных систем это 4294967296.
Увеличить никак, только создавать второй массив. |
|
|
|
|
Алексей1153 |
16.1.2012, 8:04
Сообщение
#3
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
Цитата(ilyabvt @ 15.1.2012, 17:41) Link Увеличить никак, только создавать второй массив. ага, где его, второй, создавать, если первый уже всё возможное ОЗУ сожрал ? |
|
|
|
|
ilyabvt |
16.1.2012, 18:41
Сообщение
#4
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3
|
Цитата(Алексей1153 @ 16.1.2012, 11:04) Link ага, где его, второй, создавать, если первый уже всё возможное ОЗУ сожрал ? О точно. Что-то я погорячился, да и с максимальным размером размером тоже переборщил, ОС все-таки не все 4 гига задействует, а немного меньше. Сообщение отредактировал ilyabvt - 16.1.2012, 18:42 |
|
|
|
|
BRE |
16.1.2012, 20:33
Сообщение
#5
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(ilyabvt @ 16.1.2012, 19:41) Link ОС все-таки не все 4 гига задействует, а немного меньше. Немного? Для 32 битных платформ: в венде для userspace процесса отводится 2 Гб, в linux - 3. |
|
|
|
|
Алексей1153 |
18.1.2012, 7:25
Сообщение
#6
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
теоретишно, можно применить std::vector с переопределённым аллокатором так, тогда что массива будет ограничен размером винта )) Но сам ни разу ещё не переопределял аллокатор, не доводилось случая.
Сообщение отредактировал Алексей1153 - 18.1.2012, 7:26 |
|
|
|
|
BRE |
18.1.2012, 8:21
Сообщение
#7
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(Алексей1153 @ 18.1.2012, 8:25) Link теоретишно, можно применить std::vector с переопределённым аллокатором так, тогда что массива будет ограничен размером винта )) Но сам ни разу ещё не переопределял аллокатор, не доводилось случая. Ну это если винт будет пару гигов. А если серьезно, то на 64 битных платформах еще можно, там объемы адресного пространства соизмеримы с объемами винтов (и никаких алокаторов писать не нужно), а для 32 бит - это фантастика. |
|
|
|
|
Алексей1153 |
18.1.2012, 9:51
Сообщение
#8
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
Цитата(BRE @ 18.1.2012, 11:21) Link Ну это если винт будет пару гигов ну вообще-то да, индекс же ограничен в контейнере типом UINT32. Так что в 32 отпадает )) но тут, опять же, необязательно с типом BYTE в контейнере работать. Если value type больше байта по размеру - то больше 2 гигов памяти можно будет использовать Сообщение отредактировал Алексей1153 - 18.1.2012, 9:53 |
|
|
|
|
BRE |
18.1.2012, 9:55
Сообщение
#9
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(Алексей1153 @ 18.1.2012, 10:51) Link но тут, опять же, необязательно с типом BYTE в контейнере работать. Если value type больше байта по размеру - то больше 2 гигов памяти можно будет использовать Нет размер адресного пространства для 32 бит ограничен 4Гб, больше не получиться никак. А если вспомнить, что это пространство делит еще и ядро и оставляет для пользовательского пространства 2/3 Гб (в зависимости от ОС), то больше 2/3 Гб использовать не получиться все равно. |
|
|
|
|
Sokoloff |
18.1.2012, 10:25
Сообщение
#10
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11
|
Может использовать QFile::map?
Link |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 25.12.2025, 8:47 |