Текущий архив: 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