答えはありますが、問題の詳細を知らずに一般化することは困難です。
32 ビットの Windows XP を想定しています。
数百 MB の連続したメモリを必要としないようにしてください。運が悪いと、いくつかのランダムな dll が使用可能なアドレス空間を介して不便なポイントにロードされ、連続したメモリの非常に大きな領域が急速に削減されます。必要な API によっては、これを防ぐのが非常に難しい場合があります。「通常の」メモリ使用量に加えて 2 つの 400MB ブロックのメモリを割り当てるだけで、最終的な「小さな」40MB ブロックを割り当てる場所がなくなることは、非常に驚くべきことです。
一方、適切なサイズのチャンクを一度に事前に割り当ててください。約 10MB 程度が適切な妥協点のブロック サイズです。データをこのようなサイズのチャンクに分割できれば、アドレス空間を合理的に効率的に埋めることができます。
それでもアドレス空間が不足する場合は、何らかのキャッシュ アルゴリズムに基づいてブロックをページ インおよびページ アウトできる必要があります。ページアウトする適切なブロックの選択は、処理アルゴリズムに大きく依存し、慎重な分析が必要になります。
ページアウトする場所を選択することは、別の決定です。それらを一時ファイルに書き込むだけにすることもできます。Microsoft の Address Windowing Extensions API を調査することもできます。どちらの場合でも、ページアウトされようとしている何かを指しているポインターをクリーンアップするようにアプリケーションの設計に注意する必要があります。そうしないと、本当に悪いことが起こります。
幸運を!