2011-01-17 3 views
2

Я создаю программу, которая будет выделять огромное количество данных в ОЗУ. Теперь, если в RAM не хватает места, программа будет перенесена в виртуальную память, и произойдет обмен подкачки. Это очень медленно. Можно ли проверить оставшееся пространство оперативной памяти? И можно ли проверить, использует ли система виртуальную память?проверить оставшееся пространство в ОЗУ на Windows?

Это на C++ в Windows.

+1

Windows будет агрессивно пытаться использовать всю доступную оперативную память, заполняя ее дисковым кешем, если нет активной программы. –

+2

Вся память в Windows в витальном режиме. Возможно, вам захочется узнать, будет ли ваша программа заменена на диск. – ThomasMcLeod

+1

@ThomasMcLeod: вы знаете? Возможно, вы правы ... – Karl

ответ

4

Вы можете использовать функцию GlobalMemoryStatusEx, чтобы получить количество свободной оперативной памяти. Чтобы получить уведомление, когда вы исчерпали ОЗУ, вы можете использовать метод QueryMemoryResourceNotification.

+0

Существуют ли альтернативы в случае, если windows.h недоступен? – Karl

+1

Почему бы не открыть windows.h? – ThomasMcLeod

+0

Например, если вы используете Visual C++ express. Он не приходит с окнами. Я вспомнил. – Karl

1

Просто наличие свободного барана не означает, что окна не будут отображаться в вашей программе. Вы можете попробовать SetProcessWorkingSetSize api для GetCurrentProcess, но он не дает гарантии, вы можете вместо этого использовать VirtualLock, который должен его гарантировать, но вы можете получить ухудшенную производительность.

Смежные вопросы