Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Размещение в памяти больших массивов [D7, WinXP]


Страницы:   1 2

vlad2 ©   (2007-02-05 13:50:00) 

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


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

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


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

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

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


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

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


vlad2   (2007-02-09 09:18:00) [4]

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

> Или

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


Anatoly Podgoretsky   (2007-02-08 21:23:00) [5]

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

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

Или


Чапаев   (2007-02-08 21:21:00) [6]

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


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

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

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


Джо   (2007-02-08 20:03:00) [8]

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

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


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

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

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


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

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

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


Anatoly Podgoretsky   (2007-02-08 19:39:00) [11]

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

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


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


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

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


vlad2   (2007-02-08 19:02:00) [13]

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


GrayFace   (2007-02-08 18:17:00) [14]

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

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


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

tesseract ©   (05.02.07 16:00) [8]

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


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


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


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


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

tesseract ©   (05.02.07 15:55) [6]

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


tesseract   (2007-02-05 15:55:00) [18]


> Игорь Шевченко ©   (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:47:00) [19]


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


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


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


Не нужно.

см. [1], [2]


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

tesseract ©   (05.02.07 15:32) [3]


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


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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо