Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Максимальный размер массива


Автор: MystDeim 22.11.2007, 22:04
Нужно создать массив большого размера порядка миллиарда строк!
При создании массива уже больше миллиона строк Билдер вылетает с ошибкой... :(

Автор: DjoNIK 22.11.2007, 22:14
Цитата(MystDeim @  22.11.2007,  22:04 Найти цитируемый пост)
Нужно создать массив большого размера порядка миллиарда строк!

Какой тип данных?


ЗЫ: точно "нужно"?

Автор: Alek86 22.11.2007, 22:22
DjoNIK, та любой тип данных smile
массив, наверна, статический делается


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

а еще лучше подучить STL (std::vector)

Автор: Treod 22.11.2007, 22:23

У тя какой тип данных, если double, должно работать...

Автор: MystDeim 22.11.2007, 22:39
Тип данных char
длина строки 25 символов, а строк нужно очень много!

Автор: srd 22.11.2007, 22:43
Ты неверно решаешь задачу. Массив такого размера не может быть нужен smile

Автор: MAKCim 22.11.2007, 22:54
Цитата(MystDeim @  22.11.2007,  22:39 Найти цитируемый пост)
Тип данных char
длина строки 25 символов, а строк нужно очень много! 

итого ~25GB
не сильно ли много?
если не секрет, что за задача?  smile 

Автор: MystDeim 22.11.2007, 23:01
Ну с размером я конечно загнул smile
А задаче эта - поиск путей и контуров в графе.

Дык, как можно сделать большой массив?

Автор: DjoNIK 22.11.2007, 23:15
Цитата(MystDeim @  22.11.2007,  23:01 Найти цитируемый пост)
Дык, как можно сделать большой массив?

Сказали же делай динамический массив.

Автор: archimed7592 23.11.2007, 02:22
Цитата(MAKCim @  22.11.2007,  22:54 Найти цитируемый пост)
не сильно ли много?

Есть ещё такая маленькая проблемка: современные 32-битные ОС со скрипом отдают в адресное пространство 3 гига из 4-х. Отсюда нужно вычесть размер проги(и размеры библиотек и т.п.), так что в общём и целом получается не очень много smile.

Автор: MAKCim 23.11.2007, 09:31
Цитата(archimed7592 @  23.11.2007,  02:22 Найти цитируемый пост)
Есть ещё такая маленькая проблемка: современные 32-битные ОС со скрипом отдают в адресное пространство 3 гига из 4-х. Отсюда нужно вычесть размер проги(и размеры библиотек и т.п.), так что в общём и целом получается не очень много 

во-первых, объем ОЗУ может быть <= 64GB, что в совокупности с PAE позволяет его адресовать (AWE-окна)
во-вторых, если памяти не так много, всегда есть swap, и опять таки, в совокупности с PAE, можно эмулировать объем памяти равный размеру файла подкачки
если кэширование в ОС работает хорошо, можно минимизировать обращение к диску

Автор: SaDFromSpb 23.11.2007, 09:48
Цитата(archimed7592 @  23.11.2007,  02:22 Найти цитируемый пост)
так что в общём и целом получается не очень много

Послушали бы тебя лет 20 назад...  smile 

Автор: archimed7592 23.11.2007, 12:38
Цитата(MAKCim @  23.11.2007,  09:31 Найти цитируемый пост)
во-первых, объем ОЗУ может быть <= 64GB, что в совокупности с PAE позволяет его адресовать

Позволяет адресовать их ОС. Процессу в любом случае достаётся 4-х гиговое пространство(которое в реальности урезано до 3-х и то об этом попросить нужно smile).

Автор: Vredniy 23.11.2007, 15:43
Объяви массив вне main()  smile 

Автор: incondition 20.1.2008, 01:37
Цитата(archimed7592 @ 23.11.2007,  12:38)
Цитата(MAKCim @  23.11.2007,  09:31 Найти цитируемый пост)
во-первых, объем ОЗУ может быть <= 64GB, что в совокупности с PAE позволяет его адресовать

Позволяет адресовать их ОС. Процессу в любом случае достаётся 4-х гиговое пространство(которое в реальности урезано до 3-х и то об этом попросить нужно smile).

Есть чипсеты, позволяющие системно адресовать 8 гигабайт и даже 32 гигабайта оперативной памяти...



Это так, к слову...

Автор: MAKCim 20.1.2008, 10:14
Цитата(incondition @  20.1.2008,  01:37 Найти цитируемый пост)
Есть чипсеты, позволяющие системно адресовать 8 гигабайт и даже 32 гигабайта оперативной памяти...
Это так, к слову... 

от 32-х разрядного адресного пространства все равно никуда не денешься
нужно будет использовать PAE и AWE

Автор: archimed7592 20.1.2008, 10:44
Цитата(incondition @  20.1.2008,  01:37 Найти цитируемый пост)
Есть чипсеты, позволяющие системно адресовать 8 гигабайт и даже 32 гигабайта оперативной памяти...

Есть архитектура, позволяющая адресовать не то что гигабайты - терабайты и даже больше. Название у неё IA-64(Itanium2). Это так, к слову smile.

А если серьёзно, то если речь о IA-32, то Макс уже сказал - никуда не денешься и на процесс больше 4-х гиг не родишь.

Автор: bsa 20.1.2008, 20:36
Цитата(archimed7592 @ 20.1.2008,  10:44)
Есть архитектура, позволяющая адресовать не то что гигабайты - терабайты и даже больше. Название у неё IA-64(Itanium2). Это так, к слову smile.
Не только IA-64. Есть еще x86_64 (читай amd64), который тоже позволяет адресовать очень много. Правда, на практике пока только 1 терабайт физической памяти и 256 ТБ виртуальной, но как только понадобится больше, так сразу увеличат разрядность шины...

Автор: Vetyska 23.1.2008, 09:43
Модератор: Сообщение скрыто.

Автор: MAKCim 23.1.2008, 10:28
bsa, 
физическое адресное пространство 64Гб
по крайней мере адресная шина GTL+, применяемая в современных FSB, является 36-ти разрядной
а именно она диктует фактическую разрядность физического адресного пространства
теоретически разрядность физического адреса, поддерживаемого процессором, может быть больше разрядности шины и в целом зависит от реализации

Автор: bsa 23.1.2008, 11:56
MAKCim, то, что я написал, было основано на cpuinfo:
Цитата
address sizes   : 40 bits physical, 48 bits virtual

Автор: Lycifer 23.1.2008, 12:06
Зачем нужен массив?
Если для изменения или выборки элемента то используй SQL.
Конечно если нужно делать математические расщёты то придётся делать выгрузку в С++.
Ну или же если не знаеш SQL то хрони в файлах.

Автор: Lazin 23.1.2008, 12:19
Lycifer, иногда приходится обрабатывать большие объемы данных, например кэшировать что-нибудь в памяти, здесь SQL не поможет)))

Автор: MAKCim 23.1.2008, 13:12
Цитата(bsa @  23.1.2008,  11:56 Найти цитируемый пост)
то, что я написал, было основано на cpuinfo:

AMD?
я же имел в виду Intel
все равно это никак не проиворечит тому, что я написал
все зависит от реализации

Автор: bsa 23.1.2008, 13:39
Цитата(MAKCim @ 23.1.2008,  13:12)
я же имел в виду Intel
Ну я ж не телепат. smile 
У Intel действительно поменьше:
Цитата(Intel® Core™2 Quad CPU)
address sizes   : 36 bits physical, 48 bits virtual

Автор: Lycifer 23.1.2008, 14:24
Lazin я же писал зачем нужен массив?

А несколько мильярдов строк кеш не сможет поддерживать, да и зачем сдесь кэшировать? SQL по выборки очень быстро работает, так что это особо не имеет смысла.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)