Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Управление памятью для программ


Автор: GekaP404 13.3.2012, 12:31
Постановка задачи:
Необходимо ограничить выделяемую память для какого-нибудь приложения. Ну к примеру необходимо чтобы на "%name"интернет браузер выделялось не более 150мб памяти.

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

Автор: xvr 13.3.2012, 13:24
Вот http://technet.microsoft.com/en-us/library/cc755056.aspx штука вроде умеет

Автор: GekaP404 13.3.2012, 21:03
эта штука умеет, а вот был бы код и возможность внесения своих изменений)))
Собственно вот, что выяснил сегодня, но не разобрался. Функция SetProcessWorkingSetSize. Может кто работал с ним ? и поможет разодраться.

Автор: xvr 13.3.2012, 22:26
Цитата(GekaP404 @  13.3.2012,  21:03 Найти цитируемый пост)
 Функция SetProcessWorkingSetSize.

Это не то. Эта функция ограничит количество физической памяти, которую сможет использовать процесс, но не ограничит количество виртуальной памяти. Т.е. процесс все равно сможет заказать больше памяти, чем установленно через SetProcessWorkingSetSize, и при попытке ее использовать у процесса пойдет трешинг в своп (что закончится глобальным замедлением всей системы)

Автор: GremlinProg 14.3.2012, 06:29
Цитата(GekaP404 @  13.3.2012,  14:31 Найти цитируемый пост)
Необходимо ограничить выделяемую память для какого-нибудь приложения. Ну к примеру необходимо чтобы на "%name"интернет браузер выделялось не более 150мб памяти.

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

процесс должен в таком случае иметь по крайней мере стратегию, которая предусматривает такое ограничение,
иначе он просто будет тупо падать при "упирании головой в твой потолок"

Автор: GekaP404 19.3.2012, 22:01
Цитата(GremlinProg @  14.3.2012,  06:29 Найти цитируемый пост)
даже если ты ограничишь память на процесс, это не означает, что процесс сможет комфортно работать с тем, что ты ему оставил,

процесс должен в таком случае иметь по крайней мере стратегию, которая предусматривает такое ограничение,
иначе он просто будет тупо падать при "упирании головой в твой потолок" 


Спасибо xvr и GremlinProg за ответы!!! 
Кстати а как программы справляется когда само по себе мало физической памяти?


А вообще возможно как-то ограничить чего-нибудь, что бы на важные процессы выделялось больше памяти(машинного времени идр)т.е. не тратилось на пустое, и не необходимое.

Автор: GremlinProg 20.3.2012, 07:35
Цитата(GekaP404 @  20.3.2012,  00:01 Найти цитируемый пост)
а как программы справляется когда само по себе мало физической памяти?

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

если дисковой мало - просто падают  smile  (или включают уже свои интеллектуальные механихмусы, если таковые имеются, ограничивающие расход ресурсов)
Цитата(GekaP404 @  20.3.2012,  00:01 Найти цитируемый пост)
А вообще возможно как-то ограничить чего-нибудь, что бы на важные процессы выделялось больше памяти(машинного времени идр)т.е. не тратилось на пустое, и не необходимое.

приоритет процесса, потока?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)