Как рассчитать свободное адресное пространство в Windows? - PullRequest
1 голос
/ 13 июля 2009

Как рассчитать объем свободного виртуального адресного пространства, который мой процесс занимает в Windows?

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

И что более важно: это нужно рассчитывать для каждого процесса, потому что я забочусь только о своем процессе, я все еще использую Win32.

Я пробовал VirtualQuery (), но он не возвращает общее оставшееся адресное пространство.

Спасибо.

Ответы [ 3 ]

1 голос
/ 24 сентября 2010

Используйте функцию GlobalMemoryStatusEx из Win32 API. Вас интересует поле ullAvailVirtual, которое представляет собой количество байтов виртуального пространства, которое не было зарезервировано или зафиксировано вашим процессом.

1 голос
/ 13 июля 2009

Может потребоваться просмотреть GetProcessMemoryInfo или GetProcessWorkingSetSizeEx , чтобы определить объем используемой памяти.

0 голосов
/ 13 июля 2009

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

Один из вариантов - выделить блоки памяти при запуске и использовать кэш LRU для повторного использования выделенных блоков памяти и сохранения в памяти только самых последних использованных данных. Ваша программа также будет работать быстрее (во время выполнения выделение не требуется), и вы предотвратите фрагментацию памяти из-за выделения / освобождения памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...