Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.22;
Скачать: CL | DM;

Вниз

Размещение в памяти больших массивов   Найти похожие ветки 

 
vlad2   (2007-02-05 13:50) [0]

Допустим имеется 2 Гб ОЗУ. Нужно разместить массив (для чтения/записи) 1.5 Гб. Какими функциями лучше воспользоваться с точки зрения возможности размещения максимально больших массивов и быстродействия?
До сих пор пользовался GlobalAlloc, разбивая массив на несколько частей, но сейчас появились проблемы с его размещением.


 
Игорь Шевченко ©   (2007-02-05 14:32) [1]

я сильно сомневаюсь в том, что его удастся разместить


 
MBo ©   (2007-02-05 14:47) [2]

Такой объем данных лучше хранить в файле, доступ к его частям чере Memory Mapped File
При желании оформить можно доступ через класс с индексированным свойством, чтобы обращаться, как к массиву.


 
tesseract ©   (2007-02-05 15:32) [3]


> Игорь Шевченко ©   (05.02.07 14:32) [1]
> я сильно сомневаюсь в том, что его удастся разместить


При желании можно и 3 Гб разместить. Просто реально ли это нужно?


 
Игорь Шевченко ©   (2007-02-05 15:38) [4]

tesseract ©   (05.02.07 15:32) [3]


> При желании можно и 3 Гб разместить


в Win32 ? Пример в студию


 
Сергей М. ©   (2007-02-05 15:47) [5]


> разбивая массив на несколько частей


Это уже не массив, а связный список подмассивов-"шматков" исходного массива.


> Нужно разместить массив (для чтения/записи) 1.5 Гб


Не нужно.

см. [1], [2]


 
tesseract ©   (2007-02-05 15:55) [6]


> Игорь Шевченко ©   (05.02.07 15:38) [4]
> tesseract ©   (05.02.07 15:32) [3] > При желании можно и
> 3 Гб разместитьв Win32 ? Пример в студию


multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional RU" /fastdetect /PAE /3GB

Так можно, но очень осторожно


 
Игорь Шевченко ©   (2007-02-05 15:59) [7]

tesseract ©   (05.02.07 15:55) [6]

Все равно трехгиговый массив не влезет. А с каких пор, уважаемый, Delphi научилась создавать EXEшники с флагом IMAGE_LARGE_ADDRESS_AWARE, а главное, корректно работать с такими адресами ?


 
tesseract ©   (2007-02-05 16:00) [8]


>  А с каких пор, уважаемый, Delphi научилась создавать EXEшники
> с флагом IMAGE_LARGE_ADDRESS_AWARE, а главное, корректно
> работать с такими адресами ?


Я ж не говорю, что это в Delphi, я говорю что процесс может сожрать 3 Gb оперативки.


 
Игорь Шевченко ©   (2007-02-05 16:06) [9]

tesseract ©   (05.02.07 16:00) [8]

Процесс может и больше сожрать, через AWE, только вот я сильно сомневаюсь, что факт прожорливости процесса каким-то образом связан с попыткой размещения в памяти сабжевого массива.


 
GrayFace ©   (2007-02-08 18:17) [10]

Сергей М. ©   (05.02.07 15:47) [5]
Это уже не массив, а связный список подмассивов-"шматков" исходного массива.

Зачем же связный список? Тут больше массив массивов подойдет.


 
vlad2   (2007-02-08 19:02) [11]

Спасибо всем ответившим. Я тут посмотрел разные варианты, и у меня возник такой вопрос.
Имею 1 Гб ОЗУ. Как мне разместить один массив хотя бы (!) в 1 Гб? Кусками, конечно, можно разместить и больший объём (со свап-файлом). Вопрос возник по той причине, что, например, FORTRANовская программка легко размещает у меня один массив в 2 Гб и больше одним оператором allocate.


 
DiamondShark ©   (2007-02-08 19:24) [12]


> FORTRANовская программка легко размещает у меня один массив
> в 2 Гб и больше одним оператором allocate

А кто тебе сказал, что она его размещает в непрерывной области?
Вся внутренняя "кухня" доступа к массивам от тебя скрыта за высокоуровневыми операторами.


 
Anatoly Podgoretsky ©   (2007-02-08 19:39) [13]

> vlad2  (08.02.2007 19:02:11)  [11]

Это ложь, в Win32 размер всего адресного пространтсва выделеного пользователю составляет всего 2 гб и получить из него 2 гб только для одного массива не возможно, как минимум первые 64 кб просто не доступны пользователю.


 
vlad2   (2007-02-08 19:40) [14]

DiamondShark ©
> Вся внутренняя "кухня" доступа к массивам от тебя скрыта за высокоуровневыми операторами.

Очень хорошо. А есть ли в Виндах и/или Дельфи одна функция, как в фортране, чтобы я обратился к ней с громадным массивом и не ломал голову, как мне разбить массив и писал код, высчитывая границы и т.д. (пусть этим занимается внутренняя "кухня")?


 
vlad2   (2007-02-08 19:57) [15]

Anatoly Podgoretsky ©
> Это ложь, в Win32 размер всего адресного пространтсва выделеного пользователю составляет всего 2 гб и получить из него 2 гб только для одного массива не возможно

Охотно верю. Но всё-таки в Дельфи я даже 1 Гб не могу отвести "одним куском", как в фортране. Или могу? :)


 
Джо ©   (2007-02-08 20:03) [16]

> [15] vlad2   (08.02.07 19:57)
> Но всё-таки в Дельфи я даже 1 Гб не могу отвести
> "одним куском", как в фортране. Или могу? :)

Да откуда вообще появилась информация, что фортран их обязательно одним куском выделит и в своп ничего не попадет?


 
vlad2   (2007-02-08 20:17) [17]

Джо ©
Может быть, Винды на своей внутренней "кухне" сами дробят этот массив, но этот процессскрыт от меня, и я об этом не забочусь.

Знакомый опытный программист на фортране утверждает, что уверен, что масссив размащается в ОЗУ одним куском (по кр. мере та часть, что в ОЗУ). Основания: если вместо одного массива разместить, например, два, то операции с ним проходят в несколько раз медленнее, чем аналогичные на одном размещённом большом массиве.


 
Чапаев ©   (2007-02-08 21:21) [18]

> А с каких пор, уважаемый, Delphi научилась создавать EXEшники
> с флагом IMAGE_LARGE_ADDRESS_AWARE
{$SetPEFlags <integer expression>}?


 
Anatoly Podgoretsky ©   (2007-02-08 21:23) [19]

> vlad2  (08.02.2007 19:57:15)  [15]

> Но всё-таки в Дельфи я даже 1 Гб не могу отвести "одним куском", как в фортране. Или могу? :)

Или


 
vlad2   (2007-02-09 09:18) [20]

> Anatoly Podgoretsky ©   (08.02.07 21:23) [19]

> Или

Уважаемый Анатолий, не подскажете, как? Как называется функция, аналогичная по действию фортрановскому оператору allocate, чтобы можно было сразу же разместить один массив размером не меньше 1 гига?


 
Сергей М. ©   (2007-02-09 10:24) [21]

Ликбез:
http://www.ict.edu.ru/ft/005128//ch10.pdf


 
Игорь Шевченко ©   (2007-02-09 10:27) [22]

Чапаев ©   (08.02.07 21:21) [18]

Не знал, спасибо. И что, работает ?


 
Чапаев ©   (2007-02-09 22:26) [23]

> [22] Игорь Шевченко ©   (09.02.07 10:27)
Да, кое-что работает. Но вопрос про "а главное, корректно работать с такими адресами" остаётся вопросом.



Страницы: 1 вся ветка

Текущий архив: 2007.07.22;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.021 c
6-1166618062
OLIMJON
2006-12-20 15:34
2007.07.22
Обмен голосовой информацией между двумя ПК в локальной сети.


15-1182493788
CCill
2007-06-22 10:29
2007.07.22
Как организовать загрузку в безопастном режиме?


9-1156110789
Normal
2006-08-21 01:53
2007.07.22
Какие существуют способы вычисления нормалей?


15-1182025715
rumpelshtilchen
2007-06-17 00:28
2007.07.22
Язык


2-1182958390
TruePunk
2007-06-27 19:33
2007.07.22
отображение файлов в листбоксе