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

Вниз

память и файл подкачки   Найти похожие ветки 

 
KADAN ©   (2005-05-14 10:27) [0]

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


 
-=XP=- ©   (2005-05-14 10:33) [1]

Нужно не спрашивать, а выделять в нужном месте.

HGLOBAL GlobalAlloc(
   UINT uFlags, // object allocation attributes
   DWORD dwBytes  // number of bytes to allocate  
  );


 
Digitman ©   (2005-05-14 11:17) [2]

а какая тебе разница ?
что, свопинг сильно влияет на производительность твоего алгоритма ?


 
-=XP=- ©   (2005-05-14 11:35) [3]

что, свопинг сильно влияет на производительность твоего алгоритма ?

В технических требованиях писать:
Требуемый объем ОЗУ: 2 ГБайта


 
KADAN ©   (2005-05-14 11:53) [4]

-=XP=- ©   (14.05.05 10:33) [1]
к сожалению, не смог этой функцией выделить место именно в физической памяти, может подскажете необходимые параметры

Digitman ©   (14.05.05 11:17) [2]
очень сильно влияет. лучше я уж буду свопить сам.

-=XP=- ©   (14.05.05 11:35) [3]
нельзя ограничиваться двумя гигабайтами, объем данных может быть ОЧЕНЬ большим.


 
Digitman ©   (2005-05-14 11:57) [5]


> очень сильно влияет.


что-то слабо верится ...
каков характер твоей задачи ? что она делает ?


лучше я уж буду свопить сам


это как ?


 
KADAN ©   (2005-05-14 12:06) [6]

Digitman ©   (14.05.05 11:57) [5]
задача - маскимальное ускорение работы с данными. если влазит в память (именно в физическую), тогда работать с памятью, иначе своп производится вручную.


 
Deka ©   (2005-05-14 12:12) [7]

Может лучше алгоритм оптимизировать? Моим задачам тоже требовалось много памяти и "веник" ругался на нехватку ОЗУ (при полутора гигов на борту), но переделал алгоритм и теперь все в полном ажуре. И скорость и объем.


 
Набережных С. ©   (2005-05-14 12:13) [8]


> KADAN ©

VirtualAlloc + VirtualLock. Только я сильно сомневаюсь, что ты обеспечишь более эффективный свопинг, нежели ОС, ну да дело хозяйское.


 
Deka ©   (2005-05-14 12:13) [9]

Наверное можно как-то сказать "венику" что такой-то блок памяти нельзя выгружать, но если ты всю память забьешь - "веник" загнется... :(


 
KADAN ©   (2005-05-14 12:31) [10]

Уважаемые Digitman и Набережных С., не надо сомневаться... дело действительно обстоит так. комбинируя буферизацию и свой свопинг можно добиться весьма значительного ускорения работы, нежели доверять это дело "венику".

2 Deka. Алгоритм и так оптимальный. Объем данных, повторяюсь, может быть "бесконечным" (int64). Небольшие объемы (помещающиеся в памяти) свопить не имеет смысла, для этого мне и нужно место именно в физической памяти.


 
alex_***   (2005-05-14 12:33) [11]

Делай временные файлы с промежуточными результатами. Интересно что понимается под "свой свопинг" - написать свой менеджер памяти?


 
Digitman ©   (2005-05-14 12:41) [12]


> Интересно что понимается под "свой свопинг"


вот именно - ЧТО ?

гонять туда-сюда байты из файла и обратно средствами API - это вовсе не свопинг

свопинг - механизм, реализуемый самой ОС на уровне ядра

механизм этот тесно связан с соотв.фичей ЦП


 
KADAN ©   (2005-05-14 12:43) [13]

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


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

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


 
Deka ©   (2005-05-14 12:49) [15]

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

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


 
KADAN ©   (2005-05-14 12:53) [16]

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


 
KADAN ©   (2005-05-14 12:54) [17]


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

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


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

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


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

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

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

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

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


 
KADAN ©   (2005-05-14 13:05) [20]

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


 
Digitman ©   (2005-05-14 13:30) [21]


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


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


 
Deka ©   (2005-05-14 13:31) [22]

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


 
KADAN ©   (2005-05-14 13:41) [23]

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


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

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


 
Digitman ©   (2005-05-14 13:52) [25]


> KADAN


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

Locking pages into memory may degrade the performance of the system by 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.


 
KADAN ©   (2005-05-14 14:06) [26]


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

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

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

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


 
-=XP=- ©   (2005-05-14 14:22) [27]

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:48) [28]


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

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


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


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

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


 
KADAN ©   (2005-05-14 16:42) [30]


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

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


 
Mystic ©   (2005-05-14 16:43) [31]

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

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


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


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

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

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

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



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

Форум: "WinAPI";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.046 c
14-1118319350
stud
2005-06-09 16:15
2005.07.11
вывести мигающую картинку в ячейке dbgrid


1-1119598529
kot andrei
2005-06-24 11:35
2005.07.11
FileCtrl


3-1117609509
Andy BitOff
2005-06-01 11:05
2005.07.11
Запрос на выборку не повторяющихся записей.


1-1119446600
Aleksandr.
2005-06-22 17:23
2005.07.11
Как проверить вхождение числа в перечисляемый тип?


1-1119602054
Леша
2005-06-24 12:34
2005.07.11
Изменение ситемной даты





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский