Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.044 c
2-1191875733
Vitek2
2007-10-09 00:35
2007.11.04
Что это такое?


2-1192121694
alikon1
2007-10-11 20:54
2007.11.04
SQL запрос требует ненужные поля


3-1182845730
Yasmin
2007-06-26 12:15
2007.11.04
Не обновляются данные


2-1192101439
snake-as
2007-10-11 15:17
2007.11.04
Переместить объект на форме


2-1192122858
Reko
2007-10-11 21:14
2007.11.04
Как можно получить список (дерево) папок и файлов?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский