Как гарантировать, что когда процесс вызывает malloc (), он сразу же выделит физическую память?

Я ищу способ предварительного выделения памяти для процесса (ФИЗИЧЕСКАЯ память), чтобы он был абсолютно гарантированно доступен для кучи C ++ при вызове new / malloc. Мне нужно, чтобы эта память была доступна моему процессу независимо от того, что другие процессы пытаются сделать с системной памятью. Другими словами, я хочу зарезервировать физическую память для кучи C ++, чтобы она была доступна сразу после вызова malloc ().
Вот подробности:

Я занимаюсь разработкой системы реального времени. Система состоит из нескольких процессов, требующих памяти. Процесс А является критически важным процессом, и он должен выжить и быть невосприимчивым к плохому поведению любых других процессов. Обычно он умещается в 0,5 ГБ памяти, но иногда требуется до 2,5 ГБ. Другие процессы пытаются использовать любое количество памяти.

Меня беспокоит то, что другие процессы могут выделять много памяти, истощая запасы физической памяти в системе. Затем, когда процессу A требуется больше памяти FAST, она недоступна, и системе придется менять страницы, что займет много времени.
Крайне важно, чтобы процесс A получил всю необходимую память без задержки, в то время как у меня все в порядке, если другие процессы не работают.

Я работаю на Windows 7 64-битной.

Редактировать:
Будет ли SetProcessWorkingSetSize работать? Значение: будет ли вызов этого для достаточно большого объема памяти защитить мой процесс A от любого другого процесса в системе.

2

Решение

VirtualLock это то, что вы ищете. Это заставит ОС сохранять страницы в памяти, пока они имеют размер рабочего набора (с этой функцией М.К. связался в своем ответе). Тем не менее, нет способа кормить эту память malloc/new— вам придется реализовать свой собственный распределитель памяти.

2

Другие решения

Я думаю, что этот вопрос странный, потому что Windows 7 не является самой подходящей ОС для приложений реального времени. Тем не менее, существует интерфейс, который может вам помочь:

AllocateUserPhysicalPages

1

По вопросам рекламы [email protected]