大規模なメモリ領域 (メガバイト) を大きなアラインメント (メガバイト範囲の可能性もあります) で割り当てる必要があります。関数の VirtualAlloc ファミリは、これを行うためのオプションを提供していないようです。
これを達成するために Linux で行うことは、より大きな領域を mmap することです (必要なアライメントを備えた十分に大きな領域が含まれることを保証するのに十分な大きさです)。必要ありません。
例として、4 メガバイトが必要で、1 メガバイトの境界 (つまり、最下位 20 ビットにゼロがある領域の開始) に配置されているとします。私は5メガバイトをmmapします。リージョン 0x44ff000-0x49ff000 を取得するとします。その領域内には、1 メガバイト境界に配置された領域 0x4500000 ~ 0x4900000 が含まれています。次に、0x44ff000-0x4500000 と 0x4900000-0x49ff000 を munmap します。
Win32で同様のことを行うことはできますか? PAGE_NOACCESS で VirtualProtect を使用すると、メモリは解放されますか? より良い解決策はありますか?