crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Максимальный размер массива
Петр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


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(ilyabvt @ 15.1.2012, 17:41) *
Увеличить никак, только создавать второй массив.


ага, где его, второй, создавать, если первый уже всё возможное ОЗУ сожрал ? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 16.1.2012, 18:41
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Цитата(Алексей1153 @ 16.1.2012, 11:04) *
ага, где его, второй, создавать, если первый уже всё возможное ОЗУ сожрал ?

О точно. Что-то я погорячился, да и с максимальным размером размером тоже переборщил, ОС все-таки не все 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) *
ОС все-таки не все 4 гига задействует, а немного меньше.

Немного?
Для 32 битных платформ: в венде для userspace процесса отводится 2 Гб, в linux - 3.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.1.2012, 7:25
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 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) *
теоретишно, можно применить std::vector с переопределённым аллокатором так, тогда что массива будет ограничен размером винта )) Но сам ни разу ещё не переопределял аллокатор, не доводилось случая.

Ну это если винт будет пару гигов. :)
А если серьезно, то на 64 битных платформах еще можно, там объемы адресного пространства соизмеримы с объемами винтов (и никаких алокаторов писать не нужно), а для 32 бит - это фантастика. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.1.2012, 9:51
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(BRE @ 18.1.2012, 11:21) *
Ну это если винт будет пару гигов

ну вообще-то да, индекс же ограничен в контейнере типом 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) *
но тут, опять же, необязательно с типом 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?
http://doc.trolltech.com/main-snapshot/qfile.html#map
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 12:51