2

新しい/mallocを呼び出したときにC++ヒープで使用できることが絶対に保証されるように、メモリをプロセス(物理メモリ)に事前に割り当てる方法を探しています。他のプロセスがシステムメモリで何をしようとしているかに関係なく、このメモリをプロセスで使用できるようにする必要があります。つまり、物理メモリをC ++ヒープに予約して、malloc()を呼び出すとすぐに使用できるようにします。詳細は次のとおりです。

リアルタイムシステムを開発しています。このシステムは、メモリを大量に消費するいくつかのプロセスで構成されています。プロセスAはミッションクリティカルなプロセスであり、存続し、他のプロセスの不正な動作の影響を受けないようにする必要があります。通常は0.5GBのメモリに収まりますが、2.5GBも必要になる場合もあります。他のプロセスは、任意の量のメモリを使用しようとします。

私の懸念は、他のプロセスが大量のメモリを割り当てて、システムの物理的なメモリリザーブを使い果たしてしまう可能性があることです。次に、プロセスAがより多くのメモリを高速で必要とする場合、それは使用できず、システムはページをスワップする必要があり、これには長い時間がかかります。プロセスAが必要なすべてのメモリを遅滞なく取得することが重要ですが、他のプロセスが失敗しても問題ありません。

私はWindows764ビットで実行しています。

編集:SetProcessWorkingSetSizeは機能しますか?意味:これを十分な量のメモリに対して呼び出すと、プロセスAがシステム内の他のプロセスから保護されます。

4

2 に答える 2

2

VirtualLockはあなたが探しているものです。ワーキングセットサイズ(MKが彼の回答でリンクしている関数)にある限り、OSはページをメモリに保持するように強制されます。mallocただし、このメモリを/にフィードする方法はありませんnew。独自のメモリアロケータを実装する必要があります。

于 2012-09-28T19:25:58.160 に答える
1

Windows 7はリアルタイムアプリケーションに最適なOSではないため、この質問は奇妙だと思います。そうは言っても、あなたを助けるかもしれないインターフェースがあるようです:

AllocateUserPhysicalPages

于 2012-09-28T14:25:27.317 に答える