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

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

память и файл подкачки


Страницы:   1 2

KADAN ©   (2005-05-14 10:27:00) 

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


Набережных С.   (2005-05-14 21:22:00) [1]


> KADAN ©   (14.05.05 16:42) [30]

Читать документацию об управлении памятью в Windows до полного просветления.

> Mystic ©   (14.05.05 16:43) [31]

Возможно, я с этим пока не разбирался за ненадобностью. Но, думаю, суть там та же самая - системный менеджер-то тот-же, или работает по тем же принципам, как минимум. Но за ссылку спасибо, прочитаю под настроение:)


Mystic   (2005-05-14 16:43:00) [2]

Другого способа в пользовательском режиме нет.

Ну... можно использовать AWE: http://podgoretsky.com/ftp/Docs/Delphi/Memory/awe/02-about.html


KADAN   (2005-05-14 16:42:00) [3]


> Набережных С. ©   (14.05.05 16:32) [29]

прежде чем зафиксировать область в ОЗУ ее надо выделить в ОЗУ. вопщем-то вопрос был именно в этом.


Набережных С.   (2005-05-14 16:32:00) [4]


> KADAN ©   (14.05.05 12:43) [13]

Я чего-то не понял:( Тебе нужна область, которая будет зафиксирована в ОЗУ и не будет сбрасываться в файл подкачки? VirtualLock именно это и делает. Чего еще-то? Другого способа в пользовательском режиме нет. Да и не нужен другой, этого за глаза.


KADAN   (2005-05-14 14:48:00) [5]


> -=XP=- ©   (14.05.05 14:22) [27]

выделяется не физическая память...


-=XP=-   (2005-05-14 14:22:00) [6]

var
 MEM: HGLOBAL;
 PMem: pointer;
 Size: integer;
begin
 Size := 1024;
 MEM := GlobalAlloc( LMEM_FIXED, Size);
 if MEM <> 0 then
 try
   PMem := GlobalLock(MEM);
   if PMem <> nil then
   begin
     // работа с памятью  
   end
   else
     raise Exception.Create('Can not lock memory')
 finally
   GlobalFree(MEM)
 end
 else
   raise Exception.Create('No memory available')
end;


Написать класс для управления блоками памяти - и...


KADAN   (2005-05-14 14:06:00) [7]


> Digitman ©   (14.05.05 13:30) [21]

globalmemorystatus - даст мне dwAvailPhys. ежели мне хватает ее забираю...

> Digitman ©   (14.05.05 13:52) [25]

я не стану забирать ВСЮ свободную память, метров 20 оставлю на системные нужды, этого вполне хватит. да и вообще наверное не стану пользовать VirtualLock, если пользователь захочет поиграть в кваку пока идет расчет - его проблемы.


Digitman   (2005-05-14 13:52:00) [8]


> KADAN


выдержка из справки к VirtualLock() :

Locking pages into memory may degrade the performance of the systemby reducing the available RAM and forcing the system to swap out other critical pages to the paging file. By default, a process can lock a maximum of 30 pages. The default limit is intentionally small to avoid severe performance degradation. Applications that need to lock larger numbers of pages must first call the SetProcessWorkingSetSize function to increase their minimum and maximum working set sizes. The maximum number of pages that a process can lock is equal to the number of pages in its minimum working set minus a small overhead.


alex_***   (2005-05-14 13:46:00) [9]

to KADAN-> напиши чем дело закончится, интересно


KADAN   (2005-05-14 13:41:00) [10]

2 Deka ©
см. KADAN ©   (14.05.05 12:31) [10]


Deka   (2005-05-14 13:31:00) [11]

Слушай, KADAN, у меня вопросик. Тебе нужна вся свободная физическая память для обработки, объем данных может быть "бесконечным" и собираешься сам делать механизм свопинга, то ЗАЧЕМ ТЕБЕ WINDOWS? Все что ты хочешь - полный контроль над ВСЕЙ физической памятью можно получить без WINDOWS. Может надо тебе перейти на Borland Pascal и все сделать в DOS? Там ты будешь полновластный хозяин всего железа и все сможешь реализовать. Все это поставить на отдельном компе, а резульаты обработки и входные данные передовать по сетке.


Digitman   (2005-05-14 13:30:00) [12]


> будем пользовать GlobalMemopryStatus


и какое отношение GlobalMemopryStatus имеет к сабжу ?


KADAN   (2005-05-14 13:05:00) [13]

> tesseract   (14.05.05 13:02) [19]
спасибо и на этом... что ж, будем пользовать GlobalMemopryStatus...


tesseract   (2005-05-14 13:02:00) [14]

Никакой "физической памяти" современные ОС не предоставляют. Разве, что драйверам. Размер выделяемой памяти до 4Gb в обычных Windows и до 8Gb в DataCenter (при настройке в boot.ini).
to Deka >> Драйвера устройств реализуют доступ в область системной памяти её размер ограничен, как правило такие драйвера занимают 50-100 кбайт. Драйвера-фильтры работают в нормальной памяти.

to KADAN>> Если хочешь потренироваться напиши сервис, он работает с более высоким приоритетом. А ещё лучше проанализируй то-что ты делаешь и выясни на ФИГА ТЕБЕ СТОЛЬКО ПАМЯТИ. Windows сама знает какие данные нужны, а какие нет. Сброс неиспользуемых страниц в файл под качки и называется свопингом. На Sysinternals есть утилиты которые могут показать статистику использования файла подкачки.

Если тебе так уж хочется поместить всю прогу в оперативку отключи файл подкачки.

А если уж хочешь конкретно поизголяться - вот тебе две функции -KE386IoSetAccessMap -KE386IoSetAccessProcess. Среднее время до синего экрана - 3-7 минут.


alex_***   (2005-05-14 12:56:00) [15]

да ерундой он заморачивается насчет своего свопинга. Советовали уже привести в порядок свой алгоритм


KADAN   (2005-05-14 12:54:00) [16]


> Deka ©   (14.05.05 12:49) [15]

не заморачивайся


KADAN   (2005-05-14 12:53:00) [17]

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


Deka   (2005-05-14 12:49:00) [18]

Насколько я помню каждой программе выделяется виртуальная память. Кажется даже размером 4 гигабайта. Думаю что физическую память получить из программы нельзя...
Реализовать свой свопинг... интересно... Думаю тебе понадобится написать некий драйвер. Мне кажется, что получить кусок физической памяти можно не на уровне приложения, а на уровне, например, драйвера. Может быть тебе надо реализовать некое виртуальное устройство, драйвер которого выделит и зафиксирует для твоей проги физическую память. Может так? Как думаешь?

Вот такие рассуждения вслух...


alex_***   (2005-05-14 12:46:00) [19]

отковырять ножиком от винта :) лишний гемор делаешь себе. Делай через временные файлы. Так все системы работают если большие вычисления


KADAN   (2005-05-14 12:43:00) [20]

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


Страницы:   1 2

Наверх

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