私はVirtualAlloc
で割り当てている2つのメモリ領域を持っています:0x1E0000 (Size: 0x39000, Reserve)
と0x219000 (Size: 0x3000, Commit)
です。これらは両方とも同じ割り振り境界(この場合は0x40000 (64K*4)
に丸められています)内にあり、第2の領域は最初の終了位置で開始します。1回のコールで両方を予約することなく、同じ割り当て内に2つの連続したメモリ領域を予約できないのはなぜですか?
ここで1分間コミットする部分は忘れてしまいます。 I MEM_RESERVE
最初に0x39000
、次にMEM_RESERVE
、次の0x3000
となると、ERROR_INVALID_ADDRESS
となります。しかし、私がMEM_RESERVE
を1つにして0x39000+0x3000=0x3C000
とすると、それはうまく動作し、MEM_COMMIT
を使って2番目の領域を正常にコミットできます。
なぜですか?なぜ、私は各予約部分を1つの大きな予約領域としてではなく、独自に予約することができないのですか?最初の領域を予約した後、割り当て内の残りの領域(0x219000-0x21FFFF)
はMEM_FREE
の状態になるので、残りの0x7000
の最初の0x3000
を割り振り境界に予約するにはどうしたらいいですか?
コメントコードを投稿してください。私はあなたがしようとしていることに従うことは難しいです。 –