nProjTotal=20000;
float *AA_=new float[nProjTotal*nProjTotal];
Указатель на 400 000 000 элементов???
Код:
Говорит об ошибке!!! Оперативки 3 Гб.
Я думаю, что это связано с тем, что не хватает памяти, под указатель ... если ли тип "long указатель"??????
А это ещё с какого перепугу :confused: ?
[/QUOTE]
Не знаю с какого, но это факт:
filename[8] = *(itoa( i, str_numfile, 10 ));
HANDLE hFile[9];
HANDLE hMapFile[9];
Что за код: какие файлы, какие хендлы :eek: ?
Вся работа по поддержке свопирования страниц массива будет скрыта от программиста. И выглядеть будет следующим образом
Код:
// Здесь одновременно требуется использовать значения из разных страниц массива
int PageCount = MegaArray.Get_Page_Count();
MegaArray.Set_Page_Count (50); // увеличение кол-ва страниц
MegaArray [10] = MegaArray [100] + MegaArray [1000] + ...; // Много ссылок
MegaArray.Set_Page_Count (PageCount); // Восстановление кол-ва страниц
int PageCount = MegaArray.Get_Page_Count();
MegaArray.Set_Page_Count (50); // увеличение кол-ва страниц
MegaArray [10] = MegaArray [100] + MegaArray [1000] + ...; // Много ссылок
MegaArray.Set_Page_Count (PageCount); // Восстановление кол-ва страниц
И всё - специально для возможности масштабирования объекта, все служебные массивы внутри него будут сделаны динамическими (malloc/realloc/free). И вся эта "кухня" от сторонних разработчиков будет скрыта :D.
[/QUOTE]
единственное что подвигло меня на переработку это то что в первом примере не происходит переключение страниц, и этого самого главного глюка ты не заметил , а написал целую кучу идиотских с точки зрения самого алгоритма придирок. можешь придираться к своим подчиненным на работе, но я не твой подчиненный, и потому твои замечания меня не интересуют, более того я их искренне считаю флудом.
2el scorpio.
гыг... ты б перед тем как начать разработку "с нуля" получил бы лицензию на мой алгоритм. лицензия состоит в публичном признании моего первенства на решение данной проблемы путем мап-файлов. после этого в своей программе ты можешь поставить в копирайтах свой ник сразу после моего. ... хотя нет ни надо ... просто напиши что идея алгоритма моя - а реалитзация твоя. :D :D :D
[/QUOTE]
Давай ка посмотрим ВСЕ твои изменения и сопоставим их с моими "идиотскими придирками".
"для чего создавать массив memory? Чтобы добить свопфайл?"
Идиотская придирка? Однако, от memory ты избавился:
Код:
< memory = (T*)(new char[MAX_FILE_SIZE]);
---
> //memory = (T*)(new char[MAX_FILE_SIZE]);
---
> //memory = (T*)(new char[MAX_FILE_SIZE]);
"Еще один баг: ты не инициализируешь поле curr_file."
Щас, заинициализируем:
Код:
> curr_file = 1000;
"Странно, размер контейнера задается в элементах, а выборка элемента происходит по байтовой позиции"
Упс... исправим:
Код:
< int num_file = ( position / MAX_FILE_SIZE ) + 1;
---
> unsigned __int64 byte_position = position * sizeof(T);
>
> int num_file = ( byte_position / MAX_FILE_SIZE );
---
> unsigned __int64 byte_position = position * sizeof(T);
>
> int num_file = ( byte_position / MAX_FILE_SIZE );
"Unmap не вызывается?"
Опа... и уже вызывается
Код:
> UnmapViewOfFile( memory );
" Ты запутал сам себя с тусованием типов int, __int32 и __int64."
Поправим положение:
Код:
< T GetValue( __int32 position )
---
> T GetValue( __int64 position )
---
> T GetValue( __int64 position )
Собственно, это все твои изменения, но не все мои критические замечания.
Как видим, мои замечания тебя "не интересуют". :)
И что конкретно я не заметил? :)
"для чего создавать массив memory? Чтобы добить свопфайл?"
Идиотская придирка? Однако, от memory ты избавился:
Код:
< memory = (T*)(new char[MAX_FILE_SIZE]);
---
> //memory = (T*)(new char[MAX_FILE_SIZE]);
---
> //memory = (T*)(new char[MAX_FILE_SIZE]);
"Еще один баг: ты не инициализируешь поле curr_file."
Щас, заинициализируем:
Код:
> curr_file = 1000;
"Странно, размер контейнера задается в элементах, а выборка элемента происходит по байтовой позиции"
Упс... исправим:
Код:
< int num_file = ( position / MAX_FILE_SIZE ) + 1;
---
> unsigned __int64 byte_position = position * sizeof(T);
>
> int num_file = ( byte_position / MAX_FILE_SIZE );
---
> unsigned __int64 byte_position = position * sizeof(T);
>
> int num_file = ( byte_position / MAX_FILE_SIZE );
"Unmap не вызывается?"
Опа... и уже вызывается
Код:
> UnmapViewOfFile( memory );
" Ты запутал сам себя с тусованием типов int, __int32 и __int64."
Поправим положение:
Код:
< T GetValue( __int32 position )
---
> T GetValue( __int64 position )
---
> T GetValue( __int64 position )
Собственно, это все твои изменения, но не все мои критические замечания.
Как видим, мои замечания тебя "не интересуют". :)
И что конкретно я не заметил? :)[/QUOTE]
га - га прочитай мой пост еще раз . там это написано прямым текстом. га - га - га.
P.S. как ты подумаешь почему чол создавший тему не говорит тебе спасибо за твои "ценные" указания ?
А на пузырьковый алгоритм сортировки лицензию купить не требуется :confused:
Ладно, для тех, кто в танке :mad: , повторяю свой пост на первой странице этой темы :p .
Цитата:
Когда требуется создать элемент с до...я (очень много) элементов, придётся сделать финт ушами . Так как сама Windows имеет ограничения по размеру доступной одной программе памяти, то использование системного файла подкачки не поможет. Придётся делать свой алгоритм подкачки.
Вот примерное объявление класса мегамассива.
код объявления класса повторять не буду
Конкретную реализацию чтения/записи в файл попробуйте придумать сами
Для большей оптимальности программы можно вместо одной страницы использовать несколько страниц - список, в котором при загрузке новой страницы будет сбрасываться страница, к которой не обращались дольше всех. Это сделать сложнее - но дерзайте
И это при том, что ВЫ, появились в этой теме совсем недавно.
Так что признавать я ничего не собираюсь - люди рассудят нас. А вечером закину код.
[/QUOTE]
ну если те очень надо то могу продать.
[QUOTE=el scorpio]
Ладно, для тех, кто в танке :mad: , повторяю свой пост на первой странице этой темы :p .
[/QUOTE]
интересно где там упоминаются map-файлы ?
выложишь код - жди комментариев. :D
А кто говорил, что я Map использовать буду? Или Вы считаете свой способ решения задачи единственным?
Кстати, а какие объекты сможет хранить данный массив: только базовые типы и простые структуры, или же включая сложные классы категории "контейнер"?
С превеликим удовольствием выслушаю Ваши комментарии моего кода, а вот сей час изрядно озадачу.
Объект представляет собой массив из дохрена элементов. Но прежде, чем его где-то использовать, нужно проинициализировать, заполнив все ячейки начальным значением (для целочисленных типов - нулём). В уважающих себя контейнерах массивов это делает конструктор.
Внимание вопрос: сколько времени будет производится создание объекта? :D
Кстати, а какие объекты сможет хранить данный массив: только базовые типы и простые структуры, или же включая сложные классы категории "контейнер"?
С превеликим удовольствием выслушаю Ваши комментарии моего кода, а вот сей час изрядно озадачу.
Объект представляет собой массив из дохрена элементов. Но прежде, чем его где-то использовать, нужно проинициализировать, заполнив все ячейки начальным значением (для целочисленных типов - нулём). В уважающих себя контейнерах массивов это делает конструктор.
Внимание вопрос: сколько времени будет производится создание объекта? :D[/QUOTE]
ламер... насмешил... я жду твоего кода хотя его главный и уничтожающий недостаток знаю уже сейчас .... не обижайся если потом будешь выглядеть идиотом:))))))))))))))))))
А вот ответов на конкретный вопрос о предполагаемой скорости (продолжительности) инициализации массива в 400 миллионов элементов я, наверное, не дождусь.
Хотя решение есть. Сложное и долгое в реализации, зато простое и быстрое в работе - а для сложных задач иных решений не существует (иначе они были бы простыми :D).
P.S.
Попрошу не "тыкать", ибо, перефразировав Булгакова, ни один скорпион ещё ни с кем не пил на брудершафт.