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

Вниз

выделение большого объема памяти   Найти похожие ветки 

 
Unknown user ©   (2007-10-10 12:21) [0]

как выделить максимально доступный процессу объем памяти? и какие это значения для WinXP? зависит ли это число от объема физической памяти или система руководствуется более тонкими материями при определении значения макс. объема доступной процессу памяти :)


 
Сергей М. ©   (2007-10-10 12:25) [1]


> зависит ли это число от объема физической памяти


Не зависит.


> какие это значения для WinXP?


Теоретически  - до 2 Гб (до 3 Гб при определенных условиях)
Практически - горазло меньше 2 Гб.


> система руководствуется более тонкими материями


Да, именно так.


 
Unknown user ©   (2007-10-10 12:38) [2]

может есть способ обмануть систему? например, использовать многократные вызовы CreateHeap, тогда суммарная память выделенная процессу может быть больше чем при использовании HeapAlloc с одной кучей. это сработает?


 
clickmaker ©   (2007-10-10 12:40) [3]


> [2] Unknown user ©   (10.10.07 12:38)

а в чем проблема? зачем столько?


 
Unknown user ©   (2007-10-10 12:47) [4]

обработка больших массивов данных


 
clickmaker ©   (2007-10-10 12:55) [5]

а где эти массивы?
в конце-концов, есть же VirtualAlloc, memory-mapped files...


 
Сергей М. ©   (2007-10-10 12:55) [6]


> Unknown user ©   (10.10.07 12:47) [4]


Ликбез здесь:
http://www.biblioteka.net.ru/data/c/msvc1/THEORY/HTM/glava23.html


> обработка больших массивов


Обработка обработке рознь.
Поясни ..


 
Unknown user ©   (2007-10-10 13:00) [7]

>Обработка обработке рознь.
>Поясни ..

Согласен. Нерационально. Я бы так не делал. Но наш программист хочет именно все и сразу. Так что с моей стороны присутствует только теоретический интерес.

Кто-то подскажет как выжать максимум? Возможно уже и не с помощью кодинга, а настройкой системы.


 
homm ©   (2007-10-10 13:08) [8]

Поставь 64-бит винду.


 
Сергей М. ©   (2007-10-10 13:08) [9]


> наш программист хочет именно все и сразу


А ты-то кто ?)
Разве не программист ? Или того "программиста" зовут О.И.С.Б.М.Бендер-Бей ?)

Понимаешь ли, heap - "рудиментарный орган", доставшийся в наследство от Win16, где вирт.память была сегментированной, а не плоской.

В Win32 все вызовы Global/Local/HeapAlloc сводятся, в конечном итоге, к вызову VirtualAlloc, т.е. выделению в ВАП процесса региона из смежных страниц фиксированного размера (4K)

ВАП процесса в Win32 имеет фиксированный размер, равный 4Гб. Из них прикладному коду доступны менее 2Гб.


 
Unknown user ©   (2007-10-10 13:09) [10]

>а где эти массивы?

эти массивы в файлах на диске. цель - минимизировать обращения к диску. memory-mapped files помогут это сделать?


 
homm ©   (2007-10-10 13:17) [11]

Единственный способ минимизмровать обращениек диску, при ограниченном объеме памяти — сделать обработку линейной и по возможности однопроходной.


 
Сергей М. ©   (2007-10-10 13:20) [12]


> memory-mapped files помогут это сделать?


Помогут.

Но выше 2Гб все равно не прыгнешь.


 
Unknown user ©   (2007-10-10 13:22) [13]

конкретных рекомендаций я так и не услышал :( кроме сменить винду на 64-bit версию.

вопрос такой: как можно увеличить объем выделяемой процессу памяти?

несколько непонятно поведение системы: на двух машинах по 2 Гб RAM, одна версия ОС, но на первой выделяемый предел около 1400 Мб, на второй около 700 Мб.

а кто я есть в данном вопросе не столь важно :)


 
Unknown user ©   (2007-10-10 13:23) [14]

>Но выше 2Гб все равно не прыгнешь

выше и не пытаюсь :)


 
Сергей М. ©   (2007-10-10 13:27) [15]


> как можно увеличить объем выделяемой процессу памяти?


Выгрузив из АП процесса "лишние" модули.


> конкретных рекомендаций я так и не услышал


А использовать MMF разве не рекомендация ?


 
homm ©   (2007-10-10 13:35) [16]

> [13] Unknown user ©   (10.10.07 13:22)
> несколько непонятно поведение системы: на двух машинах по
> 2 Гб RAM, одна версия ОС, но на первой выделяемый предел
> около 1400 Мб, на второй около 700 Мб.

когда 512 мб оп было, ради интереса тестировал.
Выделялось 2052, если не изменяет память, метра. Естественно это в диспетчере задач. Пользовательский размер был хоть и ментше, но не существенно, никак не меньше 1,5 гб.

Так что ищи проблему в коде. Как выделяешь память?


 
Unknown user ©   (2007-10-10 14:01) [17]

>Как выделяешь память?

h:=GetProcessHeap;
size1:=...;
mem:=heapalloc(h,0,size1);
size2:=HeapSize(h,0,mem);

>А использовать MMF разве не рекомендация?

при использовании memory-mapped files система сама организует кеш и считывает в оп память нужные фрагменты с диска? насколько эффективным в этом случае будет приложение с точки зрения уменьшения времени затрачиваемого на работу с диском.


 
Leonid Troyanovsky ©   (2007-10-10 14:04) [18]


> Unknown user ©   (10.10.07 14:01) [17]

> эффективным в этом случае будет приложение с точки зрения
> уменьшения времени затрачиваемого на работу с диском

Зависит от того, как организована работа с данными.

--
Regards, LVT.


 
homm ©   (2007-10-10 14:15) [19]

> [17] Unknown user ©   (10.10.07 14:01)
> насколько эффективным в этом случае будет приложение с точки
> зрения уменьшения времени затрачиваемого на работу с диском.

Ненасколько. Рпботать только удобнее.

Еше раз помедитируй над [11], и ксатаи, ответь обработка данных линейная? однопроходная?


 
Unknown user ©   (2007-10-10 14:25) [20]

> обработка данных линейная? однопроходная?

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


 
Ping   (2007-10-10 14:28) [21]

Unknown user ©   (10.10.07 14:25) [20]

Для такой работы, в общем случае, и 64 КБ достаточно.


 
Leonid Troyanovsky ©   (2007-10-10 14:30) [22]


> Unknown user ©   (10.10.07 14:25) [20]

> данные считываются последовательными блоками с одного файла
> и после обработки в памяти записываются в другой файл. что

Никакой mmf здесь не требуется.
Выбрать размеры буферов кратными размеру кластера,
только не heapalloc but VirtualAlloc(Ex)

--
Regards, LVT.


 
Unknown user ©   (2007-10-10 14:34) [23]

> только не heapalloc but VirtualAlloc

поясните чем VirtualAlloc лучше в моем случае, плиз.


 
Ping   (2007-10-10 14:37) [24]

Более того, если на компьютере даже и 2 ГБ ОЗУ, все равно система не даст процессу все 2 ГБ, даже если и очень просить. То есть, часть данных будут скинуты в своп, что, в свою очередь, значительно уменьшит быстродействие. Так что - определяй оптимальный, как с точки зрения системы, так и с точки зрения алгоритма размер буфера в памяти - и вперед!


 
homm ©   (2007-10-10 14:42) [25]

> [20] Unknown user ©   (10.10.07 14:25)
> и после обработки в памяти

Тьфу… Обработка данных линейная? однопроходная?


> проще говоря, не знаю

Тогда на основании каких данных ты решил, что программе нехватает именно оперативной памяти?


 
clickmaker ©   (2007-10-10 14:43) [26]


>  однопроходная?

судя по всему, заднепроходная )


 
homm ©   (2007-10-10 14:48) [27]

> [26] clickmaker ©   (10.10.07 14:43)
> судя по всему, заднепроходная )

Выразил то, что я стеснялся сказать :)


 
Сергей М. ©   (2007-10-10 14:59) [28]


> Unknown user ©   (10.10.07 14:25) [20]


Т.е. у вас "разделение мартышкиного труда" - ты отвечаешь за ститывание-запись тех самых "блоков", а тот самый программист-"Бендер" отвечает за обработку каждого переданного тобой ему блока, я правильно понял ?


 
Leonid Troyanovsky ©   (2007-10-10 15:02) [29]


> Unknown user ©   (10.10.07 14:34) [23]

> поясните чем VirtualAlloc лучше в моем случае, плиз.

Первая выделяет блок в куче, (на хрена, в данном случае, куча)
а вторая - совершенно прямолинейный кусок ВАП.

--
Regards, LVT.


 
Unknown user ©   (2007-10-10 15:28) [30]

>Т.е. у вас "разделение мартышкиного труда" - ты отвечаешь за >ститывание-запись тех самых "блоков", а тот самый программист-"Бендер" >отвечает за обработку каждого переданного тобой ему блока, я правильно >понял ?

нет, неправильно. тот самый программист "Бендер" все делает сам, просто поинтересовался у меня как выделить больший объем памяти, чем ему возвращает система.

>судя по всему, заднепроходная )

может и так, но тем не менее его программа решает такие задачи, какие Вам в жизни не придется решать. его программа обрабатывает данные самолетного сканера, с использованием данных калибровки камеры, полетных данных инерциальной системы позиционирования, параметров геоида и т.д. алгоритмы очень непростые, не однопроходные и не линейные, если это в сам деле важно :)

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


 
homm ©   (2007-10-10 15:31) [31]

> [30] Unknown user ©   (10.10.07 15:28)
> его программа обрабатывает данные самолетного сканера, с
> использованием данных калибровки камеры, полетных данных
> инерциальной системы позиционирования, параметров геоида
> и т.д.

Сейчас мне стало реально страшно за будующее нашей страны и собственную безопасность :(


 
clickmaker ©   (2007-10-10 15:32) [32]


> как помочь ему выбить у системы побольше памяти

и что, гига с лишним ему мало?
включайте режим AWE, там больше будет доступно
Или, если уж совсем все плохо - ставьте Win64


 
homm ©   (2007-10-10 15:40) [33]

> [30] Unknown user ©   (10.10.07 15:28)
> он решил, что ему надо память всю и сразу, переубедить его
> не удалось

Это не вопрос веры, религии, переубеждения или волевого решения. Либо память нужна, и это очевидно, либо алгоритм кривой. Если ты пытался его переубедить, что вся память не нужна, значит это все-же не очевидно, а значит алгоритм таки кривой. Не подпускай его к компу, пусть формулы пишет на бумаге, а для кодинга нормального программиста найдите.


 
Сергей М. ©   (2007-10-10 15:42) [34]


> программа обрабатывает данные самолетного сканера


Стесняюсь спросить, неужели в режиме реального времени ?)


 
Leonid Troyanovsky ©   (2007-10-10 15:44) [35]


> Unknown user ©   (10.10.07 15:28) [30]

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

Наймите программиста.

--
Regards, LVT.


 
Сергей М. ©   (2007-10-10 15:45) [36]


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


Гнать его из программистов надо.

И вообще - сапожник должен тачать сапоги, а пирожник печь пироги.

А когда чистой воды математик берется за не свое дело, да еще и с амбициями - вот тогда самолеты с этими самыми "сканерами" и начинают сыпаться с неба аки горох)


 
Unknown user ©   (2007-10-10 15:45) [37]

>Стесняюсь спросить, неужели в режиме реального времени ?)

этим занимается другая программа. та о которой речь - это уже постобработка, но ей надо перелопатить гигабайты данных и длиться это может долгие часы.


 
Unknown user ©   (2007-10-10 15:51) [38]

ладно, закроем эту тему.
мне просто интересно было выяснить почему так разнится значение выделяемой процессу памяти на разных компах с одинаковым объемом RAM и версией ОС, и как эту разницу нивелировать (в большую сторону). но разговор пошел не в том русле..


 
Сергей М. ©   (2007-10-10 15:51) [39]


> это уже постобработка, но ей надо перелопатить гигабайты
> данных и длиться это может долгие часы


Купите под эту задачу приличную по производительности станцию и наймите программиста.


 
clickmaker ©   (2007-10-10 15:58) [40]


> почему так разнится значение выделяемой процессу памяти
> на разных компах

потому что процесс, как правило, не одинок.
А для перелопачивания гектаров данных за многие часы нужна и правда станция типа mainframe, обычный "офисный" ПК, пусть даже и сервер, для этого мало подходит



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

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

Наверх




Память: 0.57 MB
Время: 0.057 c
2-1191946252
Err_f
2007-10-09 20:10
2007.11.04
Как с помощью Delphi можно связаться с сервером точного времени?


2-1192164282
Kolan
2007-10-12 08:44
2007.11.04
Как сделать так, чтобы в Edit вводились только латинские символы?


15-1191262340
cber
2007-10-01 22:12
2007.11.04
В чём ошибка?


2-1192009402
Dreamse
2007-10-10 13:43
2007.11.04
Как сделать приложение с одним DataModule без формы


2-1191572966
Scarllett
2007-10-05 12:29
2007.11.04
URL/HTML открытого окна MS IE